Es SQL sensible a mayúsculas y minúsculas. He usado MySQL y SQL Server, que parecen ser sensibles a mayúsculas y minúsculas. Este es siempre el caso? ¿El estándar define mayúsculas y minúsculas?
sql
case-sensitive
Steve Tranby
fuente
fuente
Respuestas:
Las palabras clave de SQL son sensibles a mayúsculas (
SELECT
,FROM
,WHERE
, etc.), pero a menudo están escritos en mayúsculas. Sin embargo, en algunas configuraciones, los nombres de tabla y columna distinguen entre mayúsculas y minúsculas. MySQL tiene una opción de configuración para habilitarlo / deshabilitarlo. Por lo general, los nombres de tabla y columna sensibles a mayúsculas y minúsculas son los predeterminados en Linux MySQL y los mayúsculas y minúsculas solían ser los predeterminados en Windows, pero ahora el instalador preguntó sobre esto durante la configuración. Para MSSQL es una función de la configuración de intercalación de la base de datos.Aquí está la página de MySQL sobre el nombre de mayúsculas y minúsculas
Aquí está el artículo en MSDN sobre colaciones para MSSQL
fuente
Esto no es estrictamente lenguaje SQL, pero en SQL Server si la clasificación de su base de datos distingue entre mayúsculas y minúsculas, entonces todos los nombres de tablas distinguen entre mayúsculas y minúsculas.
fuente
En SQL Server es una opción . Encenderlo apesta.
No estoy seguro acerca de MySql.
fuente
Los identificadores y las palabras reservadas no deben ser sensibles a mayúsculas y minúsculas, aunque muchos siguen una convención para usar mayúsculas para palabras reservadas y mayúsculas y minúsculas para los identificadores.
Ver SQL-92 Sec. 5.2
fuente
La especificación SQL92 establece que los identificadores pueden estar entre comillas o no. Si ambos lados no están entre comillas, siempre distinguen entre mayúsculas y minúsculas, p
table_name == TAble_nAmE
. Ej .Sin embargo, los identificadores citados distinguen entre mayúsculas y minúsculas, por ejemplo
"table_name" != "TAble_naME"
. También en función de la especificación si desea comparar identificadores no asignados con los citados, los identificadores sin comillas y con comillas pueden considerarse iguales, si los caracteres sin comillas están en mayúsculas, por ejemploTABLE_NAME == "TABLE_NAME"
, peroTABLE_NAME != "table_name"
oTABLE_NAME != "TAble_NaMe"
.Aquí está la parte relevante de la especificación (sección 5.2.13):
Tenga en cuenta que, al igual que con otras partes del estándar SQL, no todas las bases de datos siguen completamente esta sección. PostgreSQL, por ejemplo, almacena todos los identificadores sin comillas en minúsculas en lugar de mayúsculas, por
table_name == "table_name"
lo tanto (que es exactamente lo contrario del estándar). Además, algunas bases de datos no distinguen entre mayúsculas y minúsculas todo el tiempo, o la distinción entre mayúsculas y minúsculas depende de alguna configuración en la base de datos o depende de algunas de las propiedades del sistema, generalmente si el sistema de archivos distingue entre mayúsculas y minúsculas o no.Tenga en cuenta que algunas herramientas de la base de datos pueden enviar identificadores citados todo el tiempo, por lo que en los casos en que combina consultas generadas por alguna herramienta (como una consulta CREATE TABLE generada por Liquibase u otra herramienta de migración de DB), con consultas hechas a mano (como una simple selección JDBC en su aplicación) debe asegurarse de que los casos sean consistentes, especialmente en bases de datos donde los identificadores entre comillas y sin comillas son diferentes (DB2, PostgreSQL, etc.)
fuente
Según tengo entendido, el estándar SQL exige la insensibilidad a mayúsculas y minúsculas. Sin embargo, no creo que ninguna base de datos siga el estándar por completo.
MySQL tiene una configuración como parte de su "modo estricto" (una bolsa de varias configuraciones que hacen que MySQL sea más compatible con los estándares) para nombres de tabla que distinguen entre mayúsculas y minúsculas. Independientemente de esta configuración, los nombres de las columnas aún no distinguen entre mayúsculas y minúsculas, aunque creo que afecta cómo se muestran los nombres de las columnas. Creo que esta configuración abarca toda la instancia, en todas las bases de datos dentro de la instancia RDBMS, aunque hoy estoy investigando para confirmar esto (y espero que la respuesta sea no).
Me gusta cómo Oracle maneja esto mucho mejor. En SQL directo, los identificadores como nombres de tabla y columna no distinguen entre mayúsculas y minúsculas. Sin embargo, si por alguna razón realmente desea obtener una carcasa explícita, puede encerrar el identificador entre comillas dobles (que son bastante diferentes en Oracle SQL de las comillas simples utilizadas para encerrar datos de cadena). Entonces:
consultará fieldname desde tablename , pero
consultará fieldName desde tableName .
Estoy bastante seguro de que incluso podría usar este mecanismo para insertar espacios u otros caracteres no estándar en un identificador.
En esta situación, si por alguna razón encontrara deseables los nombres de tabla y columna con mayúsculas y minúsculas, estaba disponible para usted, pero todavía era algo contra lo que le recomendaría mucho.
Mi convención cuando usé Oracle a diario fue que en el código pondría todas las palabras clave de Oracle SQL en mayúsculas y todos los identificadores en minúsculas. En la documentación, pondría todos los nombres de tablas y columnas en mayúsculas. Fue muy conveniente y legible poder hacer esto (aunque a veces es difícil escribir tantas mayúsculas en el código, estoy seguro de que podría haber encontrado una función de editor para ayudar aquí).
En mi opinión, MySQL es particularmente malo por diferir sobre esto en diferentes plataformas. Necesitamos poder volcar las bases de datos en Windows y cargarlas en UNIX, y hacerlo es un desastre si el instalador en Windows olvidó poner el RDBMS en modo sensible a mayúsculas y minúsculas. (Para ser justos, parte de la razón por la que esto es un desastre es que nuestros codificadores tomaron la mala decisión, hace mucho tiempo, de confiar en la distinción entre mayúsculas y minúsculas de MySQL en UNIX). Las personas que escribieron el instalador de Windows MySQL lo hicieron realmente conveniente y Como Windows, y fue genial pasar a dar a las personas una casilla de verificación para decir "¿Te gustaría activar el modo estricto y hacer que MySQL sea más compatible con los estándares?" Pero es muy conveniente que MySQL difiera significativamente del estándar, y luego empeorar las cosas al cambiar y diferir de su propio estándar de facto en diferentes plataformas. Estoy seguro de que en diferentes distribuciones de Linux esto puede complicarse aún más, ya que los empaquetadores para diferentes distribuciones probablemente a veces han incorporado sus propias configuraciones de configuración MySQL preferidas.
Aquí hay otra pregunta SO que se analiza si es deseable la distinción entre mayúsculas y minúsculas en un RDBMS.
fuente
No. MySQL no distingue entre mayúsculas y minúsculas, y tampoco lo es el estándar SQL. Es una práctica común escribir los comandos en mayúsculas.
Ahora, si está hablando de nombres de tabla / columna, entonces sí, pero no los comandos en sí.
Entonces
es lo mismo que
pero no es lo mismo que
fuente
Esta publicación del blog me pareció muy útil (no soy el autor). Resumiendo (por favor, lea):
Encontró que DB2, Oracle e Interbase / Firebird son 100% compatibles:
fuente
No creo que SQL Server distinga entre mayúsculas y minúsculas, al menos no de manera predeterminada.
Cuando hago consultas manualmente a través de Management Studio, estropeo el caso todo el tiempo y lo acepta alegremente:
fuente
Las palabras clave SQL no distinguen entre mayúsculas y minúsculas.
Los nombres de tablas, columnas, etc., tienen una distinción entre mayúsculas y minúsculas que depende de la base de datos; probablemente debería suponer que distinguen entre mayúsculas y minúsculas a menos que sepa lo contrario (en muchas bases de datos no lo son, sin embargo; en MySQL, los nombres de tablas son algunas veces sensibles a mayúsculas y minúsculas, pero la mayoría de los demás los nombres no son).
La comparación de datos usando =,>, <etc. tiene un reconocimiento de mayúsculas y minúsculas que depende de la configuración de intercalación que se usa en la base de datos individual, tabla o incluso columna en cuestión. Sin embargo, es normal mantener una clasificación bastante consistente dentro de una base de datos. Tenemos algunas columnas que necesitan almacenar valores sensibles a mayúsculas y minúsculas; tienen una colación específicamente establecida.
fuente
Tener lo mejor de ambos mundos
En estos días, puede escribir todas sus declaraciones sql en minúsculas y si alguna vez necesita formatearlas, simplemente instale un complemento que lo haga por usted. Esto solo es aplicable si su editor de código tiene esos complementos disponibles. VSCode tiene muchas extensiones que pueden hacer esto.
fuente