Analizador de portabilidad de identificadores SQL
Pega el nombre propuesto de una tabla o columna, o una lista de nombres (uno por línea), para detectar cuáles podrían ser rechazados, renombrados silenciosamente o tratados de forma distinta por PostgreSQL, MySQL, SQL Server y SQLite, y por qué.
El análisis se realiza localmente en tu navegador. El archivo nunca se carga al servidor.
Cómo usar esta herramienta
- Pega un identificador por línea: nombre de tabla, columna o varios. Los datos no salen de tu navegador.
- Selecciona «Analizar identificadores».
- Revisa cada nombre señalado: qué motores concretos están afectados y cuáles no, y por qué.
- Usa la reescritura sugerida cuando se ofrezca. Las colisiones con palabras reservadas y la elección de estilo de comillas quedan a tu criterio, pues requieren una decisión que la herramienta no debe tomar por ti.
Supuestos
- La entrada es un identificador por línea: un nombre sin comillas o ya delimitado con el estilo de un motor (comillas dobles, acentos graves o corchetes). No es un analizador SQL: no procesa una instrucción `CREATE TABLE` completa ni definiciones de varias columnas; solo examina la forma del identificador.
- Los cuatro motores de destino son PostgreSQL, MySQL, SQL Server (T-SQL) y SQLite, habituales en tareas reales de portabilidad entre bases de datos.
- La tabla de palabras reservadas es una selección curada de colisiones comunes documentadas, no una lista exhaustiva de ningún motor; consulta Limitaciones.
Fuentes y datos de referencia
Metodología
Cada identificador se comprueba frente a seis problemas concretos de portabilidad: colisión con palabra reservada (se verifica por motor, ya que una palabra puede serlo en uno y no en otro); diferencias de conversión de mayúsculas/minúsculas (PostgreSQL pasa a minúsculas los identificadores sin comillas; la sensibilidad de MySQL depende del sistema operativo/configuración; SQL Server no distingue mayúsculas y las conserva; SQLite distingue mayúsculas); diferencias de comillas (dobles, acentos graves, corchetes); límites de longitud (63 bytes en PostgreSQL, con truncamiento silencioso; 64 caracteres en MySQL; 128 en SQL Server; sin límite práctico en SQLite); caracteres no válidos sin delimitar; y convención de nombres con guion bajo inicial. Solo se reescribe en los dos casos mecánicamente inequívocos: pasar a minúsculas para evitar diferencias de conversión y sustituir caracteres no válidos por guiones bajos. No se cambia un nombre reservado ni se elige estilo de comillas.
Ejemplo resuelto
Palabra reservada en algunos motores, pero no en todos
Datos de entrada: limit
Resultado: `limit` es palabra reservada en PostgreSQL, MySQL y SQLite, pero SQL Server no tiene una cláusula LIMIT (usa TOP / OFFSET-FETCH), así que allí no está reservada. Se señala como error y se nombran los tres motores afectados.
Identificador con mayúsculas y minúsculas mezcladas
Datos de entrada: CustomerOrder
Resultado: PostgreSQL lo convertiría silenciosamente a `customerorder` si no se delimita; MySQL, SQL Server y SQLite aplican sus propias reglas, distintas entre sí. Se advierte y se propone `customerorder` como convención portable segura.
Espacio y guion
Datos de entrada: customer order-id
Resultado: No es un identificador simple válido en ninguno de los cuatro motores: cada uno requeriría delimitación con un carácter de comillas distinto. Se señala como error y se propone `customer_order_id`, usando guiones bajos, como convención segura y universal.
Identificador PostgreSQL que supera el límite de bytes
Datos de entrada: an identifier whose encoded length exceeds 63 bytes
Resultado: PostgreSQL limita los identificadores a 63 bytes y trunca los más largos, por lo que nombres distintos pueden colisionar tras el truncamiento. Con texto multibyte, el límite de bytes no siempre coincide con el recuento de caracteres. Este comprobador aplica un conjunto curado de reglas, no valida exhaustivamente cada identificador ni configuración de base de datos.
Orientación práctica
- Usa nombres en minúsculas separados por guiones bajos (`snake_case`) para tablas o columnas que puedan consultarse desde más de un motor; así evitas por completo las diferencias de conversión de mayúsculas.
- Evita las palabras reservadas en lugar de depender de las comillas. Delimitar funciona, pero obliga a recordar el carácter de comillas específico de cada motor en todas las consultas a esa tabla.
- Mantén los identificadores muy por debajo de 63 caracteres si PostgreSQL puede ser un destino. Su truncamiento silencioso a esa longitud es un modo de fallo peligroso, no una simple molestia.
Errores comunes
- Suponer que un nombre es seguro porque no está reservado en la base de datos que se prueba ahora. Palabras comunes como order, user, limit, key e index están reservadas en unos motores y no en otros; probar solo uno oculta el problema.
- Tratar las comillas como solución universal: funcionan, pero el carácter es específico de cada motor, así que un identificador delimitado copiado sin cambios entre motores puede no analizarse.
- Pasar por alto el truncamiento silencioso de PostgreSQL a 63 bytes. A diferencia de un identificador rechazado, uno truncado parece funcionar hasta que dos nombres largos colisionan.
Preguntas frecuentes
¿Por qué `limit` se señala en tres motores y no en SQL Server?
SQL Server no tiene cláusula LIMIT; usa TOP u OFFSET/FETCH, por lo que LIMIT nunca se reservó allí como palabra clave. Sí está reservada en PostgreSQL, MySQL y SQLite, que la usan en la sintaxis de consultas.
¿Entrecomillar una palabra reservada siempre lo soluciona?
En la práctica, sí, en estos cuatro motores, pero el carácter de delimitación varía: comillas dobles en PostgreSQL/SQLite, acentos graves en MySQL y corchetes en SQL Server. Por tanto, un nombre delimitado copiado tal cual desde SQL de un motor no se analizará en otro. Esta herramienta muestra la forma equivalente de cada motor en vez de elegir una por ti.
¿Un guion bajo inicial es realmente un problema?
No; se señala solo como nota informativa menor. No es inválido en ninguno de los cuatro motores. Conviene conocerlo porque los objetos de catálogo internos de PostgreSQL y algunos ORM usan nombres con guion bajo inicial por convención.
Última revisión:
La tabla de palabras reservadas es una selección curada de colisiones comunes, conocidas y verificables para cada motor; no es exhaustiva para PostgreSQL, MySQL, SQL Server ni SQLite. Para una comprobación definitiva, consulta la referencia oficial de palabras reservadas del motor antes de finalizar el esquema. Esta herramienta tampoco analiza instrucciones SQL completas: procesa un identificador por línea, no una definición `CREATE TABLE` entera.
Las preferencias de tema y de herramientas, junto con las listas de herramientas guardadas y recientes, se almacenan solo en este navegador.