10.2 Noms de bases, tables, index, colonnes et alias
10 Structure du langage
Manuel de Référence MySQL 4.1 : Version Française
. Identifiants ->Sensibilité à la casse pour les noms
|
10.2.2 Sensibilité à la casse pour les noms
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.
Extensions MySQL à l'ANSI SQL92 .
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
.
|