Problème de case des noms de tables MySQL

Bonjour,

Aujourd’hui j’aimerais vous faire part d’un problème courant en ce qui concerne le développement via MySQL sous Windows et sous Unix. La configuration par défaut du serveur MySQL n’est pas la même selon le système d’exploitation. Dans mon cas, le problème vient de la variable lower_case_table_names. Cette dernière est configurée à 1 sous Windows et à 0 sous Unix.Vous pourrez trouver tous les détails dans la documentation officielle sur ce sujet et ainsi mieux comprendre les problème engendrés.logo_mysql

Mais les explications pour modifier cette variable ou vérifier qu’elle est sa valeur actuelle ne sont pas forcément fournies au même endroit. Je vous livre donc ici, la marche à suivre complète …

Pour connaître la valeur de vos variables MySQL, rendez vous sur votre interface phpmyadmin. Exécuter la requète SQL suivante :

SHOW VARIABLES

Vous devriez alors voir apparaître toutes les variables MySQL, et en parcourant cette liste, vous trouverez la fameuse lower_case_table_names avec sa valeur associée.

Alors dans la documentation officielle de MySQL en français, il nous explique que mettre cette valeur à 1 sous Unix aura pour répercussion majeure que lorsque vous utiliserez SHOW TABLES ou SHOW DATABASES, vous ne verrez pas la casse originale des noms. Pas si dramatique que ça, mais si on va faire un tour dans la même documentation en anglais cette fois ci, et bien on peut lire :

Exception: If you are using InnoDB tables and you are trying to avoid these data transfer problems, you should set lower_case_table_names to 1 on all platforms to force names to be converted to lowercase.

Ok, donc plus de doute, surtout dans mon cas, j’utilise InnoDB.

Alors pour modifier cette variable, ne tentez pas de la modifier depuis la console MySQL, vous aurez juste droit à une jolie erreur vous expliquant que cette variable est en lecture seule. Hum… c’est balo.

Direction votre putty pour aller éditer le fichier de conf directement. Nous y voilà donc :

sudo nano /etc/mysql/my.cnf

Puis rajouter la ligne suivante après la balise [mysqld] comme ceci :

[mysqld]
lower_case_table_names = 1

Puis relancer votre server mysql :

sudo /etc/init.d/mysql restart

Allez vérifier la valeur de la variable comme expliqué plus haut. Si la valeur est 1, tout va bien !
Vous pouvez à présent continuer votre développement sous Windows et votre mise en production sous Unix sans stress !

You’re Welcome !