| 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
  :
 Les noms de colonnes et d'alias sont insensibles à la casse dans tous les cas.| 
mysql> SELECT * FROM ma_table WHERE MA_TABLE.col=1;
 | 
 
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
  :
 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.| 
mysql> SELECT nom_de_colonne FROM nom_de_table AS a->                 WHERE a.nom_de_colonne = 1 OR A.nom_de_colonne = 2;
 | 
 
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 :
 
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 :
| 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. |  
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
 .
 |