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.
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 setlower_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 !