Tratamiento de mayúsculas y minúsculas en MySQL

Según Wikipedia, la sensibilidad a mayúsculas y minúsculas, se explica de la siguiente manera:

Que algo sea sensible a las mayúsculas y minúsculas, abreviado a veces como sensible a mayúsculas,​ y dicho también directamente en inglés case sensitive, es una expresión usada en informática que se aplica a los textos en los que tiene alguna relevancia escribir un carácter en mayúsculas o minúsculas.

Lo contrario se denomina insensible a las mayúsculas y minúsculas, abreviado a veces como insensible a mayúsculas​ y dicho también directamente en inglés case insensitive.

 

Por defecto, MySQL hace un tratamiento diferente para las mayúsculas en los nombres de las bases de datos y tablas según el sistema operativo como veremos a continuación.

Lo más sencillo y recomendable para facilitar el uso, la portabilidad y evitar problemas es adoptar una convención consistente: crear y consultar bases de datos y tablas usando nombres en minúsculas.

Muchas veces no se puede aplicar esta recomendación “de palabra”, por lo que se debe recurrir a una variable de configuración.

 

Variable lower_case_table_names

Esta variable se define dentro del archivo de configuración my.cnf (Linux) o my.ini (Windows). Determina cómo MySQL almacena en disco y consulta los nombres de bases de datos y tablas. El almacenamiento en disco se refiere al proceso de creación, con las instrucciones CREATE DATABASE y CREATE TABLE, respectivamente.

  • lower_case_table_names=0 (case sensitive en la creación y consulta)
    • los nombres se guardarán en disco tal y como se han especificado en la creación
    • los nombres en las consultas deben respetar las mayúsculas
    • NO de se debería establecer en sistemas operativos que sean case-insensitive! (Windows u OS X)
  • lower_case_table_names=1 (case insensitive en la creación y consulta)
    • los nombres se guardarán en disco siempre en minúsculas, independientemente de como se escriban
    • los nombres en las consultas son convertidos a minúsculas (también aplica a los aliases)
  • lower_case_table_names=2 (case sensitive en la creación – case insensitive en la consulta)
    • los nombres se guardarán en disco tal y como se han especificado en la creación
    • los nombres en las consultas son convertidos a minúsculas (también aplica a los aliases)
    • Solo funciona en sistemas operativos que no sean case-sensitive!
    • Los nombres de tablas InnoDB son una excepción y se almacenan en minúsculas, como en el caso de lower_case_table_names=1

A continuación, los valores por defecto para cada sistema operativo:

  • Linux: lower_case_table_names=0
  • Windows: lower_case_table_names=1
  • OS X: lower_case_table_names=2

 

¿Qué valor de lower_case_table_names usar?

En el caso de usar MySQL en un solo tipo de sistema operativo, se puede mantener el valor por defecto de lower_case_table_names.

Los conflictos aparecen al empezar a transferir tablas hacia otros sistemas que difieran en la sensibilidad a mayúsculas:

En Linux podrían existir las siguientes tablas: usuarios, USUARIOS y Usuarios.

Al importar un dump que las contuviera en Windows, la primera se crea sin problemas, pero la siguiente genera un error indicando que la tabla ya existe. Esto sucede porque para Windows las 3 tienen el mismo nombre.

A fin de evitar este tipo de problemas se puede optar por:

  1. Usar lower_case_table_names=1 en todos los sistemas (mi recomendación)
    • La “desventaja” es que no se verán listados con sus nombres originales, si los mismos estaban especificados con mayúsculas en la creación
  2. Usar lower_case_table_names=0 en Linux y lower_case_table_names=2 en Windows.
    • Esta alternativa es propensa a fallar cuando se hagan consultas que funcionan en Windows porque los nombres se pasan a minúsculas automáticamente, pero en Linux generan errores porque no se utilizaron las mayúsculas tal cual se especificaron en la creación.
    • Si se usan tablas InnoDB no queda más remedio que usar la opción 1.

 

Basado en:

http://rm-rf.es/mayusculas-y-minusculas-en-mysql/

Anuncios

Dejá tu comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

w

Conectando a %s