Un problème récurrent provient de la tentative de création de
tables avec des noms de colonnes qui sont des types de champs ou
des fonctions natives de MySQL, comme TIMESTAMP
ou GROUP
. Il vous st permis de le faire (par
exemple ABS
est permis comme nom de colonne),
mais les espaces ne sont pas permis entre le nom d'une fonction et
la première ‘(
’ suivante lors de
l'utilisation de fonctions qui sont aussi des noms de colonnes.
Un effet secondaire de ce comportement est que l'omission d'espace dans certains contexte fait que l'identifiant est interprété comme un nom de fonction. Par exemple, cette commande est valide :
mysql> CREATE TABLE abs (val INT);
Mais omettre l'espace après abs
génère une
erreur de syntaxe, car la commande semble utiliser la fonction
ABS()
:
mysql> CREATE TABLE abs(val INT);
Si vous lancez le serveur l'option de mode
IGNORE_SPACE
, le serveur autorisera l'appel de
fonction avec un espace entre le nom de la fonction et le
caractère de parenthèse ouvrante
‘(
’ suivant. Les noms de fonctions
sont alors considérés comme des mots réservés. Comme pour les
résultats, les noms de colonnes qui sont identiques au nom de
fonctions doivent être placés entre guillemets, tels que décrit
dans Section 9.2, « Noms de bases, tables, index, colonnes et alias ». Le mode SQL du serveur est
contrôlé par la procédure de la section
Section 1.5.2, « Sélectionner les modes SQL ».
Les mots suivants sont explicitement réservés en MySQL. La
plupart sont interdits par ANSI SQL92 en tant que nom de colonnes
ou de tables (par exemple, GROUP
). Quelques uns
sont réservés parce que MySQL en a besoin et utilise
(actuellement) un analyseur yacc
:
ADD |
ALL |
ALTER |
ANALYZE |
AND |
AS |
ASC |
ASENSITIVE |
BEFORE |
BETWEEN |
BIGINT |
BINARY |
BLOB |
BOTH |
BY |
CALL |
CASCADE |
CASE |
CHANGE |
CHAR |
CHARACTER |
CHECK |
COLLATE |
COLUMN |
CONDITION |
CONSTRAINT |
CONTINUE |
CONVERT |
CREATE |
CROSS |
CURRENT_DATE |
CURRENT_TIME |
CURRENT_TIMESTAMP |
CURRENT_USER |
CURSOR |
DATABASE |
DATABASES |
DAY_HOUR |
DAY_MICROSECOND |
DAY_MINUTE |
DAY_SECOND |
DEC |
DECIMAL |
DECLARE |
DEFAULT |
DELAYED |
DELETE |
DESC |
DESCRIBE |
DETERMINISTIC |
DISTINCT |
DISTINCTROW |
DIV |
DOUBLE |
DROP |
DUAL |
EACH |
ELSE |
ELSEIF |
ENCLOSED |
ESCAPED |
EXISTS |
EXIT |
EXPLAIN |
FALSE |
FETCH |
FLOAT |
FLOAT4 |
FLOAT8 |
FOR |
FORCE |
FOREIGN |
FROM |
FULLTEXT |
GRANT |
GROUP |
HAVING |
HIGH_PRIORITY |
HOUR_MICROSECOND |
HOUR_MINUTE |
HOUR_SECOND |
IF |
IGNORE |
IN |
INDEX |
INFILE |
INNER |
INOUT |
INSENSITIVE |
INSERT |
INT |
INT1 |
INT2 |
INT3 |
INT4 |
INT8 |
INTEGER |
INTERVAL |
INTO |
IS |
ITERATE |
JOIN |
KEY |
KEYS |
KILL |
LEADING |
LEAVE |
LEFT |
LIKE |
LIMIT |
LINES |
LOAD |
LOCALTIME |
LOCALTIMESTAMP |
LOCK |
LONG |
LONGBLOB |
LONGTEXT |
LOOP |
LOW_PRIORITY |
MATCH |
MEDIUMBLOB |
MEDIUMINT |
MEDIUMTEXT |
MIDDLEINT |
MINUTE_MICROSECOND |
MINUTE_SECOND |
MOD |
MODIFIES |
NATURAL |
NOT |
NO_WRITE_TO_BINLOG |
NULL |
NUMERIC |
ON |
OPTIMIZE |
OPTION |
OPTIONALLY |
OR |
ORDER |
OUT |
OUTER |
OUTFILE |
PRECISION |
PRIMARY |
PROCEDURE |
PURGE |
READ |
READS |
REAL |
REFERENCES |
REGEXP |
RELEASE |
RENAME |
REPEAT |
REPLACE |
REQUIRE |
RESTRICT |
RETURN |
REVOKE |
RIGHT |
RLIKE |
SCHEMA |
SCHEMAS |
SECOND_MICROSECOND |
SELECT |
SENSITIVE |
SEPARATOR |
SET |
SHOW |
SMALLINT |
SONAME |
SPATIAL |
SPECIFIC |
SQL |
SQLEXCEPTION |
SQLSTATE |
SQLWARNING |
SQL_BIG_RESULT |
SQL_CALC_FOUND_ROWS |
SQL_SMALL_RESULT |
SSL |
STARTING |
STRAIGHT_JOIN |
TABLE |
TERMINATED |
THEN |
TINYBLOB |
TINYINT |
TINYTEXT |
TO |
TRAILING |
TRIGGER |
TRUE |
UNDO |
UNION |
UNIQUE |
UNLOCK |
UNSIGNED |
UPDATE |
USAGE |
USE |
USING |
UTC_DATE |
UTC_TIME |
UTC_TIMESTAMP |
VALUES |
VARBINARY |
VARCHAR |
VARCHARACTER |
VARYING |
WHEN |
WHERE |
WHILE |
WITH |
WRITE |
XOR |
YEAR_MONTH |
ZEROFILL |
Voici de nouveaux mots réservés en MySQL : 5.0:
ASENSITIVE |
CALL |
CONDITION |
CONTINUE |
CURSOR |
DECLARE |
DETERMINISTIC |
EACH |
ELSEIF |
EXIT |
FETCH |
INOUT |
INSENSITIVE |
ITERATE |
LEAVE |
LOOP |
MODIFIES |
OUT |
READS |
RELEASE |
REPEAT |
RETURN |
SCHEMA |
SCHEMAS |
SENSITIVE |
SPECIFIC |
SQL |
SQLEXCEPTION |
SQLSTATE |
SQLWARNING |
TRIGGER |
UNDO |
WHILE |
Les symboles suivants (issus de la table ci-dessus) sont interdits par ANSI SQL mais permis par MySQL en tant que noms de colonnes ou de tables. Cela est dû au fait que ces noms sont très courants, et de nombreux programmeur les ont déjà utilisés.
ACTION
BIT
DATE
ENUM
NO
TEXT
TIME
TIMESTAMP
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.