#1 Le 19/09/2008, à 14:41
- ®om
[Résolu] [PHP/SQL] Tables en "lower case"
Salut,
Je vous explique tout d'abord le contexte du problème.
Je dois corriger quelques problèmes sur une appli flex, qui utilise un serveur php pour accéder à une base de données mysql.
C'est une appli développée, testée et prévue pour un serveur Windows (oui, en entreprise, le mot "portabilité" est assez mystérieux). Sauf que moi je travaille dessus avec Ubuntu, avec la base de données en locale.
Les requêtes sont écrites en majuscule dans l'appli :
"SELECT MACHIN FROM TRUC WHERE BIDULE"
Le problème, c'est que les noms de tables en mysql sont associés à des fichiers dans /var/lib/mysql/madatabase/matable.frm, et que sous linux (ext3), les noms de fichiers sont "case sensitive". Ce problème est d'ailleurs mentionné dans la doc de mysql, et ils préconisent de toujours utiliser des noms en minuscule :
http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html
La solution de réécrire toutes les requêtes en minuscule n'est pas envisageable (temps de test...), surtout que «ça n'est que pour mon poste» (alors que c'est plus important que ça, c'est pour avoir une appli portable, en vue d'éventuels changements futurs).
Je souhaite donc proposer une solution "intermédiaire", qui consiste à changer "à la volée" les requêtes passées dans une classe "dao" (là où passent toutes les requêtes), pour la passer en lowercase.
Le problème, c'est qu'évidemment, il ne faut pas tout passer en lowercase :
INSERT INTO MATABLE VALUE ("AbCdEf")
doit se transformer en
insert into matable value ("AbCdEf")
Ou même à la limite (puisque c'est juste le nom de la table qui pose problème :
INSERT INTO matable VALUE ("AbCdEf")
Mais il faut que je sois sûr à 100% que la fonction couvre tous les cas possibles de requêtes sql.
Avez-vous une solution à me proposer?
Merci d'avance.
Dernière modification par ®om (Le 19/09/2008, à 14:49)
Hors ligne
#2 Le 19/09/2008, à 14:45
- ®om
Re : [Résolu] [PHP/SQL] Tables en "lower case"
Ah en fait, rajouter :
lower_case_table_names=1
dans le fichier de config mysql (dans [mysqld] de /etc/mysql/mycnf) devrait résoudre le problème... Je teste.
EDIT: Ça marche \o/
Dernière modification par ®om (Le 19/09/2008, à 14:48)
Hors ligne