MySQL – Sensibilidad a mayúsculas/minúsculas de los nombres de las tablas
0. Índice de contenidos
1. Introducción
En este tutorial vamos a ver cómo configurar la sensibilidad a mayúsculas/minúsculas de los nombres de las tablas en MySQL.
Tomemos como ejemplo el siguiente script:
CREATE TABLE Ciudad( nombre VARCHAR(20), codigo VARCHAR(3), superficie BIGINT, poblacion BIGINT);
Si lo ejecutamos en MySQL sobre Windows el resultado será la creación de una tabla llamada: ciudad.
Mientras que si el sistema es Linux el resultado será la creación de una tabla llamada: Ciudad.
Se debe a que la sensibilidad mayúsculas/minúsculas del sistema operativo determina la sensibilidad de los nombres de las tablas en MySQL.
Esto supone un problema si queremos que nuestros entornos de: desarrollo, pre-producción y producción sean homogéneos.
2. Entorno
El tutorial está escrito usando el siguiente entorno:
- Hardware: MacBook Pro 15′ (2.8 GHz Intel Core 2 Duo, 4GB DDR3 SDRAM).
- Sistema Operativo: Mac OS X Snow Leopard 10.6.3.
- NVIDIA GeForce 9600M GT 512Mb.
- >Toshiba 500 Gb. 5400r.p.m.
3. Sensibilidad en MySQL
No vamos a profundizar en cómo gestiona MySQL las bases de datos, tablas o campos sino simplemente en cómo
podemos controlar que los nombres de las tablas sean o no sensibles a mayúculas.
En MySQL podemos definir de forma explícita cómo queremos que almacene los nombres de las tablas, para ello tenemos que definir la variable lower_case_table_names.
Puede tomar los siguientes valores:
- 0 -> Los tablas se almacenan con la sensibilidad especificada en la sentencia de creación.
La comparación de sus nombres es sensible a mayúsculas/minúsculas. - 1 -> Las tablas se almacenan convirtiendo sus nombres a minúsculas.
La comparación de sus nombres no es sensible a mayúsculas/minúsculas. - 2 -> Los tablas se almacenan con la sensibilidad especificada en la sentencia de creación.
La comparación de sus nombres no es sensible a mayúsculas/minúsculas.
La opción «0» es la establecida por defecto en Sistemas Operativos Unix.
La opción «1» es la establecida por defecto en Sistemas Operativos Windows y Mac.
4. Configuración
Debemos tener en cuenta que la configuración de esta variable afecta a todos los esquemas contenidos en la base de datos.
En el fichero de configuración de MySQL my.cnf definimos la variable lower_case_table_names contenida en el bloque mysqld.
Un ejemplo de este fichero.
[mysqld] lower_case_table_names = 1 port = 3306
5. Conclusión
Cuando trabajamos con diferentes entornos sobre diferentes sistemas es importante elegir la solución que mejor se adapta a nuestas necesidades.
Según la documentación de MySQL:
«Lo mejor es adoptar una convención consistente, cómo crear y referirse a bases de datos y tablas usando siempre minúsculas.
Esto es lo recomendado para lograr máxima portabilidad y facilidad de uso.»
Aún así, si definimos una configuración común a los sistemas, evitaremos tener que controlar de forma explícita la capitalidad de las tablas
sin perder portabilidad. Esto no siempre es posible, ya que si en el entorno de producción tenemos más de una aplicación con MySQL,
la capacidad de configuración del mismo está limitada, en este caso lo ideal es adaptarnos al sistema no configurable.
Espero os sea de utilidad.
excelente información, lo tendré siempre en cuenta. muchas gracias
Hola buen día excelente aporte, de casualidad sabrán como hacer esto para las vistas?? lo e logrado para mis tablas pero con las antes mencionadas se me coloca todo en minúsculas.
Agradezco su atención.
Saludos desde Distrito Federal, México.
Yo lo acabo de aplicar, y me funciona también con las Vistas.
Muy sencilla la solución, toda la vida he tenido ese problema y nunca se me habría ocurrido que era culpa del mysql xD
Funciona perfecto graciassssss
mi archivo en windows era
my.ini
y estaba en
C:xamppmysqlbin
puse esto
[mysqld]
#esta sentencia es para que los nombres se pongan con mayúsculas y minúsculas
#pero que no se tenga en cuenta a la hora de comparar, el 0 pone siempre a minúsculas
#y el 1 pone mayúsculas pero las tiene en cuenta siempre
lower_case_table_names = 2
No me funciona lo de la variable lower_case_table_names. Cuando pongo esa variable en el archivo «my.ini» y reinicio XAMPP, me marca error y me dice que el puerto esta bloqueado.