Les noms des bases de données, tables, index, colonnes et alias suivent tous les mêmes règles en MySQL.
La table suivante décrit la taille maximale et les caractères autorisées pour chaque type d'identifiant.
Identifiant | Longueur maximale | Caractères autorisés |
Base de données | 64 | Tous les caractères autorisés dans un nom de dossier à part
‘/ ’,
‘\ ’ et
‘. ’. |
Table | 64 | Tous les caractères autorisés dans le nom d'un fichier à part
‘/ ’ et
‘. ’. |
Colonne | 64 | Tous. |
Index | 64 | Tous. |
Alias | 255 | tous. |
Notez qu'en plus de ce qui précède, vous n'avez pas droit au caractères ASCII(0) ou ASCII(255) dans un identifiant. Avant MySQL 4.1, les identifiants que pouvaient pas contenir de guillemets.
Depuis MySQL 4.1, les identifiants sont stockés en Unicode
(UTF8). Cela s'applique aux identifiants stockés dans les tables
de définitions du fichier .frm
, et aux
identifiants stockés dans les tables de droits de la base
mysql
. Même si les identifiants Unicode
peuvent inclure des caractères multi-octets, notez que les
tailles maximales affichées dans la table sont donnés en octets.
Si un identifiant contient un caractère multi-octet, le nombre de
caractères autorisé est alors inférieur
aux chiffres affichés.
Un identifiant peut être entre guillemet ou pas. Si un
identifiant est un mot réservé, ou qu'il contient des
caractères spéciaux, vous devez le mettre
entre guillemets lorsque vous l'utilisez. Pour une liste des mots
réservés, voyez Section 9.6, « Cas des mots réservés MySQL ». Les
caractères spéciaux sont hors de la plage des caractères
alpha-numérique et ‘_
’ et
‘$
’.
Notez que si un identifiant est un mot réservé, ou contient des
caractères spéciaux, vous devez absolument le protéger avec
‘`
’ :
Le caractère de protection des identifiants est le guillemet
oblique ‘`
’ :
mysql> SELECT * FROM `select` WHERE `select`.id > 100;
Si vous utilisez MySQL avec les modes MAXDB
ou
ANSI_QUOTES
, il est aussi possible d'utiliser
les guillemets doubles pour les identifiants :
mysql>CREATE TABLE "test" (col INT);
ERROR 1064: You have an error in your SQL syntax. (...) mysql>SET SQL_MODE="ANSI_QUOTES";
mysql>CREATE TABLE "test" (col INT);
Query OK, 0 rows affected (0.00 sec)
See Section 1.5.2, « Sélectionner les modes SQL ».
Depuis MySQL 4.1, les guillemets peuvent être inclus dans les
noms d'identifiants. Si le caractère inclus dans l'identifiant
est le même que celui qui est utilisé pour protéger
l'identifiant, doublez-le. La commande suivante crée la table
a`b
, qui contient la colonne
c"d
:
mysql> CREATE TABLE `a``b` (`c"d` INT);
La protection d'identifiant par guillemets a été introduite en MySQL 3.23.6 pour permettre l'utilisation de mots réservés ou des caractères spéciaux dans les noms de colonnes. Avant la version 3.23.6, vous ne pouviez pas utiliser les identifiants qui utilisent des guillemets, et les règles sont plus restrictives :
Un nom d'identifiant est constitué de caractères
alpha-numériques issus du jeu de caractères courant, plus
‘_
’ et
‘$
’. Le jeu de caractères par
défaut est ISO-8859-1 (Latin1). Cela peut être modifié avec
l'option de démarrage
--default-character-set
de
mysqld
. See
Section 5.8.1, « Le jeu de caractères utilisé pour les données et le stockage ».
Un nom peut commencer avec n'importe quel caractère qui est valide dans un identifiant. En particulier, un nom peut commencer par un chiffre : cela est différent dans de nombreuses autres bases de données. Cependant, un nom sans guillemets ne peut pas contenir uniquement des chiffres.
Vous ne pouvez pas utiliser le caractère
‘.
’ dans les noms, car il est
utilisé pour les formats complets de références aux
colonnes, en utilisant les noms de tables ou de bases. (see
Section 9.2.1, « Identifiants »).
Il est recommandé de ne pas utiliser de noms comme
1e
, car une expression comme
1e+1
est ambigue. Elle pourrait être
interprétée comme l'expression 1e + 1
ou
comme le nombre 1e+1
, suivant le contexte.
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.