jul 07 2010

Mysql sensible a mayúsculas y minúsculas

Category: MysqlDavid González @ 15:30

En MySQL, las bases de datos  corresponden con directorios dentro del directorio de datos donde tenemos instalado mysql.

Del mismo modo, las tablas son fichero dentro de nuestro directorio de la base de datos.

Veamos un ejemplo:

root@turceta [/var/lib/mysql/tureceta_blog]# l

-rw-rw----   1 mysql mysql  104 mar 17 23:20 wp_users.MYD
-rw-rw----   1 mysql mysql 4,0K mar 18 00:03 wp_users.MYI
-rw-rw----   1 mysql mysql 1,9K abr 30 20:59 wp_TERMS.MYD
-rw-rw----   1 mysql mysql 8,0K may  1 00:30 wp_TERMS.MYI

Como podemos ver, tenemos una base de datos tureceta_blog y las tablas wp_users y wp_TERMS.

Por lo tanto, es la sensibilidad a mayúsculas y minúsculas del sistema operativo instalado la que determina la sensibilidad  en los nombres de las tablas y sus bases de datos, en mysql.

De este modo, en los sistemas operativos Windows, no tendremos ningún problema, pero con la mayoría de las variadades UNIX sí.

En primer lugar, lo más recomendable para evitar problemas de este tipo es utilizar siempre minúsculas, pero en caso de no poder cambiar nuestras tablas y bases de datos, vamos a ver la solución.

Podemos especificar en mysql como almacenar las tablas y bases de datos con la variable lower_case_table_names. Para ello, simplemente editamos el fichero my.cnf.

lower_case_table_names = 1

Lo valores que puede tomar esta variable son:

  • 0       Los nombres de tablas y bases de datos se almacenan en disco usando el esquema de mayúsculas y minúsculas especificado en las sentencias CREATE TABLE o CREATE DATABASE. Las comparaciones de nombres son sensibles a mayúsculas. Esto es lo predeterminado en sistemas Unix. Nótese que si se fuerza un valor 0 con –lower-case-table-names=0 en un sistema de ficheros insensible a mayúsculas y se accede a tablas MyISAM empleando distintos esquemas de mayúsculas y minúsculas para el nombre, esto puede conducir a la corrupción de los índices.
  • 1       Los nombres de tablas se almacenan en minúsculas en el disco y las comparaciones de nombre no son sensibles a mayúsculas. MySQL convierte todos los nombres de tablas a minúsculas para almacenamiento y búsquedas. En MySQL 5.0, este comportamiento también se aplica a nombres de bases de datos y alias de tablas. Este valor es el predeterminado en Windows y Mac OS X.
  • 2       Los nombres de tablas y bases de datos se almacenan en disco usando el esquema de mayúsculas y minúsculas especificado en las sentencias CREATE TABLE o CREATE DATABASE, pero MySQL las convierte a minúsculas en búsquedas. Las comparaciones de nombres no son sensibles a mayúsculas. Nota: Esto funciona solamente en sistemas de ficheros que no son sensibles a mayúsculas. Los nombres de las tablas InnoDB se almacenan en minúsculas, como cuando lower_case_table_names vale 1.

Si queréis más información, desde la web de mysql tenéis la explicación e incluso pros y contras de usar un valor u otro.

Entradas relacionadas

Etiquetas:

Leave a Reply