Si tout n'est pas sensible à la casse dans MySQL il est bon de savoir et se rappeler les choses suivantes pour ceux qui développent.
1) Les bases sont sensibles à la casse sur un serveur de type Unix et pas sur un serveur de type Windows (cela est OS dépendant à cause
du fait que le nom de base correspond à un nom de répertoire).
2) Les tables sont sensibles à la casse sur un serveur de type Unix et pas sur un serveur de type Windows (cela est OS dépendant à cause du fait que le nom d'une table correspond à des noms de fichiers).
3) On a donc intérêt, lorsqu'on développe, pour garantir la portabilité de
l'application, à considérer les bases et les tables comme sensibles à la
casse.
4) Souvent, par commodité, les gens qui maintiennent de nombreuses bases
créent un utilisateur MySQL par base et par application qui porte le nom de la
base elle-même. Ce n'est pas à conseiller pour des raisons de sécurité. De
plus, attention, sur une machine de type Windows, ne pas confondre l'authentification (utilisée pour se connecter) avec l'utilisation de la base elle-même. La première chose
est toujours sensible à la casse car cela ne dépend pas de l'OS mais du serveur
MySQL.
Exemple : une base Toto est sur un serveur Windows et porte le même nom que
l'utilisateur de cette base. Il faudra absolument s'authentifier comme "Toto" mais après un "use
ToTo" fonctionnera aussi bien que "use Toto" ou "use TOTO" ou "use
toto", ce qui n'est pas le cas sur un serveur Unix/Linux/BSD.
5) Les champs, qui sont insensibles à la casse dans MySQL, quel que soit l'OS qui le supporte, deviennent apparemment sensibles à la casse dès que vous programmez en PHP. En fait ce n'est qu'une apparence que j'explique plus bas. Attention cela n'a rien à voir avec MySQL. Cela est dû au fait que le langage PHP est sensible à la casse pour ses variables. Si vous utilisez un client MySQL natif pour vous connecter à une base MySQL vous vous apercevrez que MySQL se fiche éperdument de la casse des champs.
Soit, au départ :
- une première requête qui vous retourne une table que vous parcourez pour accomplir une seconde requête
- un champ retourné par la première requête qui s'appelle "Machin"
- une variable, tableau de champs, $row, qui reçoit un enregistrement après
l'autre
.... alors (exemple 1)...
$DateTempo=$row->Machin sera bon
alors que
$DateTempo=$row->machin retournera un truc vide
Par contre (exemple 2), à un autre endroit du programme, ...
$query="select Machin from bidule";
mysql_query($query);
... fonctionne aussi bien que...
$query="select machin from bidule";
mysql_query($query);
Dans l'exemple 1, "Machin" est un élément de variable php que php a construit à partir du champ retourné par MySQL. On
ne peut donc l'utiliser qu'en respectant la casse.
Dans l'exemple 2, "Machin" est un champ MySQL dans une chaîne de caractères
PHP qui va être utilisée telle que pour être envoyée à MySQL et qui sera interprétée
par MySQL. La casse du champ n'a donc pas d'importance.
E. Durup - 10/04/2002