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

  1. Pega un identificador por línea: nombre de tabla, columna o varios. Los datos no salen de tu navegador.
  2. Selecciona «Analizar identificadores».
  3. Revisa cada nombre señalado: qué motores concretos están afectados y cuáles no, y por qué.
  4. 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

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
Errores comunes

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.