En MySQL, les bases et les tables correspondent à des dossiers et des fichiers. Les tables dans une base correspondent au moins à un fichier dans le dossier de base et possiblement plusieurs, suivant le moteur de table utilisé. Par conséquent, la sensibilité à la casse du système déterminera la sensibilité à la casse des noms de bases de données et tables. Cela signifie que les noms sont insensibles à la casse sous Windows, et sensibles sous la plupart des variétés Unix. Mac OS X est une exception car il est basé sur Unix, mais le système de fichiers par défaut (HFS+) n'est pas sensible à la casse. Cependant, Mac OS X supporte aussi les volumes UFS, qui sont sensibles à la casse, comme les autres Unix. See Section 1.5.4, « Extensions MySQL au standard SQL-92 ».
Note : même si les noms ne
sont pas sensibles à la casse sous Windows, vous ne devez pas
vous réfèrer à une entité en utilisant différentes casse
dans la même requête. La requête suivante ne fonctionnera pas
car elle se référe à une table avec
ma_table
et MA_TABLE
:
mysql> SELECT * FROM ma_table WHERE MA_TABLE.col=1;
Les noms de colonnes et d'alias sont insensibles à la casse dans tous les cas.
Les alias sur tables sont sensibles à la casse avant MySQL
4.1.1. La requête suivante ne marchera pas car elle se réfère
à a
et A
:
mysql>SELECT nom_de_colonne FROM nom_de_table AS a
->WHERE a.nom_de_colonne = 1 OR A.nom_de_colonne = 2;
Si vous avez du mal à vous souvenir de la casse des noms de bases et de tables, adoptez une convention, comme toujours créer les bases et les tables en utilisant des minuscules.
La fa¸on de stocker les noms sur le disque et leur utilisation
dans les syntaxes MySQL est définie par la variable
lower_case_table_names
, qui peuvent être
spécifié au lancement de mysqld
.
lower_case_table_names
peut prendre l'une des
valeurs suivantes :
Valeur | Signification |
0 |
Les noms de tables et bases sont stockées sur le disque avec la casse
utilisée dans la commande CREATE
TABLE ou CREATE DATABASE .
Les comparaisons de nom sont sensibles à la casse.
C'est le comportement par défaut sous Unix. Notez que
si vous forcer cette valeur à 0 avec l'option
--lower-case-table-names=0 sur un
système insensible à la casse, et que vous accéder à
la table avec une autre casse, alors vous pouvez avoir
des corruptions d'index. |
1 |
Les noms de tables sont stockées en minuscules sur le disque, et les comparaisons de nom de tables sont insensibles à la casse. Ce comportement s'applique aussi aux noms de bases de données depuis MySQL 4.0.2, et aux alias de tables depuis 4.1.1. C'est la valeur par défaut sur les systèmes Windows et Mac OS X. |
2 |
Les tables et bases sont stockées sur le disque avec la casse
spécifiée dans CREATE TABLE et
CREATE DATABASE , mais MySQL les
convertis en minuscules lors des recherches. Les
comparaisons de noms sont insensibles à la casse.
Note : cela
ne fonctionne que sur les systèmes
de fichiers qui sont insensibles à la casse. Les noms
de tables InnoDB sont stockées en
minuscules, comme pour
lower_case_table_names=1 . Donne à
lower_case_table_names la valeur de
2 est possible depuis MySQL 4.0.18. |
Si vous utilisez MySQL sur une seule plate-forme, vous n'aurez
pas à changer la valeur de
lower_case_table_names
variable. Cependant,
vous pouvez rencontrer des problèmes lors des transferts entre
plates-formes, où les systèmes de fichiers différent de par
leur sensibilité à la casse. Par exemple, sous Unix, vous
pouvez avoir deux tables ma_table
et
MA_TABLE
, alors que sous Windows, ces deux
noms représentent la même table. Pour éviter les problèmes
de transferts de noms, vous avez deux choix :
Utilisez l'option
lower_case_table_names=1
sur tous les
systèmes. L'inconvénient le plus sérieux est que lorsque
vous utilisez SHOW TABLES
ou
SHOW DATABASES
, vous ne verrez pas la
casse originale des noms.
Utilisez lower_case_table_names=0
sous
Unix et lower_case_table_names=2
sous
Windows. Cela préserver la casse des noms de tables ou
bases. L'inconvénient est que vous devez vous assurer que
les requêtes utilisent toujours la bonne casse sous
Windows. Si vous transférez vos requêtes vers Unix, où la
casse des noms aura son importance, les requêtes ne
fonctionneraient plus.
Notez qu'avant de passer la valeur de
lower_case_table_names
à 1 sous Unix, vous
devez commencer par convertir vos anciens noms de tables et
bases en minuscules, avant de redémarrer
mysqld
.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.