¿Cómo cambiar los nombres de las tablas MySQL en el servidor Linux para que no distinga entre mayúsculas y minúsculas?

Estoy trabajando en un sitio web antiguo que solía estar alojado en un servidor de Apple. Cuando se migró a un nuevo servidor Linux dejó de funcionar. Estoy bastante seguro de que es porque todas las consultas MySQL utilizadas en los scripts php tienen diferentes combinaciones de casos para los nombres de las tablas (no sé por qué los desarrolladores originales no siguieron ninguna convención cuando crearon los nombres de tablas o los scripts php ) y no importó porque los servidores MySQL de Mac y Windows son insensibles a las mayúsculas y minúsculas por defecto cuando se trata de esto. Sin embargo, Linux no lo es.

¿Hay alguna manera de cambiar el valor predeterminado de Linux en MySQL para que no se distinga entre mayúsculas y minúsculas y funcione como Mac o Windows? He estado buscando pero no he encontrado ninguna respuesta que no implique cambiar los scripts, los nombres de las tablas o ambos. El sitio web debe haberse generado utilizando algunos CMS, por lo que hay docenas y decenas de páginas e incluye archivos con múltiples consultas en cada uno y cientos de tablas. Empecé a tratar de implementar este tipo de solución de la manera más inteligente que podía pensar, pero si toco los nombres de la tabla, entonces otras páginas que están funcionando en ese momento dejan de funcionar (estoy tratando de evitar que el sitio siga rompiéndose).

Hubo una variable del sistema (lower_case_table_names) en la consola del servidor MySQL en Webmin en el servidor Linux que leí podría cambiarse de 0 a 1 para abordar este problema, pero Webmin no me permite cambiarlo porque es un “solo lectura” ” variable.

Pensarías que este sería un problema fácil de resolver, pero hasta ahora estoy perdiendo la esperanza. Espero que alguien tenga una respuesta que tal vez me elude en este momento.

La sensibilidad de mayúsculas y minúsculas de MySQL es manejada por defecto por el sistema de archivos, por lo que se encontró esta diferencia:

9.2.2. Sensibilidad de mayúsculas y minúsculas

En MySQL, las bases de datos corresponden a directorios dentro del directorio de datos. Cada tabla dentro de una base de datos corresponde a al menos un archivo dentro del directorio de la base de datos (y posiblemente más, según el motor de almacenamiento). En consecuencia, la sensibilidad de mayúsculas y minúsculas del sistema operativo subyacente juega un papel en la distinción entre mayúsculas y minúsculas de los nombres de bases de datos y tablas. Esto significa que los nombres de las bases de datos y de las tablas no distinguen entre mayúsculas y minúsculas en Windows y distinguen entre mayúsculas y minúsculas en la mayoría de las variedades de Unix Una excepción notable es Mac OS X, que está basado en Unix pero utiliza un tipo de sistema de archivos predeterminado (HFS +) que no distingue entre mayúsculas y minúsculas. Sin embargo, Mac OS X también admite volúmenes UFS, que distinguen entre mayúsculas y minúsculas igual que en cualquier Unix. Consulte la Sección 1.8.4, “Extensiones de MySQL para SQL estándar”.

Afortunadamente, la siguiente oración podría ayudarte:

La variable de sistema lower_case_table_names también afecta la forma en que el servidor maneja la sensibilidad de mayúsculas y minúsculas, como se describe más adelante en esta sección.

El lower_case_table_names :

Si se establece en 0, los nombres de tabla se almacenan como se especifica y las comparaciones distinguen entre mayúsculas y minúsculas. Si se establece en 1, los nombres de tabla se almacenan en minúscula en el disco y las comparaciones no distinguen entre mayúsculas y minúsculas. Si se establece en 2, los nombres de tabla se almacenan como dados pero se comparan en minúsculas. Esta opción también se aplica a nombres de bases de datos y alias de tabla. Para obtener información adicional, consulte la Sección 9.2.2, “Sensibilidad de mayúsculas y minúsculas”.

No debe establecer esta variable a 0 si está ejecutando MySQL en un sistema que tiene nombres de archivo que no distinguen entre mayúsculas y minúsculas (como Windows o Mac OS X). Si configura esta variable a 0 en dicho sistema y accede a nombres de tablas MyISAM utilizando diferentes lettercases, puede ocasionar daños en el índice. En Windows, el valor predeterminado es 1. En Mac OS X, el valor predeterminado es 2.

Entonces parece que debes establecer lower_case_table_names a 1 en el archivo de configuración de MySQL.

Hay una variable de servidor MySQL con el mismo nombre . Probablemente necesite establecer esa variable específica en el inicio del sistema, como se describe en esta página de ayuda . Deberá encontrar la ubicación del archivo de opciones de MySQL (el mío está en /etc/my.cnf ) para su instancia de servidor de base de datos y editar / agregar esta opción a la sección [mysqld] .

No te olvides de reiniciar el daemon MySQL después …

Edite el archivo de configuración de mysql

 nano /etc/mysql/my.cnf 

o cualquier otro archivo my.cnf que se usa para configurar tu mysql .

Debajo

 [mysqld] 

agregar la línea

 lower_case_table_names=1 

correr

 sudo service mysqld restart 

Es posible que desee volver a importar su base de datos de Windows en su base de datos de Linux. Preferiblemente desde el principio, con añadir tabla e insertar instrucciones.

¡Es bueno!

No se puede cambiar el valor de lower_case_table_names mientras mysql se está ejecutando; se debe configurar al inicio. Deberá editar my.cnf (tal vez en /etc , tal vez en otro lugar, no estoy seguro). Luego reinicia mysql y deberías ser bueno.

El parámetro lower_case_table_names debe establecerse como parte de un grupo de parámetros DB personalizado antes de crear una instancia DB. Debe evitar cambiar el parámetro lower_case_table_names para las instancias de bases de datos existentes porque hacerlo podría causar incoherencias con las copias de seguridad de recuperación puntuales y las instancias de Read Replica DB.