1.8 Quels standards respecte MySQL?
1 Informations générales
Manuel de Référence MySQL 4.1 : Version Française
. Quels standards suit MySQL ? . Sélectionner les modes SQL ->Exécuter MySQL en mode ANSI . MySQL Extensions to the SQL-92 Standard . Différences entre MySQL et le standard SQL-92 . Comment MySQL gère les contraintes . Erreurs connues, et limitations de MySQL
|
1.8.3 Exécuter MySQL en mode ANSI
Si vous démarrez
mysqld
avec l'option
--ansi
, les comportements
suivants du serveurs MySQL changent :
-
||
devient l'opérateur de concaténation de chaîne, et non pas
l'opérateur binaire
OR
.
-
'"'
est traité comme un délimiteur d'identifiants (tout comme le caractère
'`'
sous MySQL), et non pas comme un délimiteur de chaînes. Vous pouvez toujours
utiliser
'`'
pour délimiter les identifiants en mode ANSI. Une implication de cela
est que vous ne pouvez pas utiliser les guillmets doubles pour délimiter une
chaîne de caractères, car elle sera interprétée comme un identifiant.
-
Vous pouvez avoir autant d'espaces que vous souhaitez entre le nom d'une
fonction et le caractère de parenthèse ouvrante
'('
. Cela impose que
les noms de fonctions soient traités comme des mots réservés. De ce fait, si vous
avez une base de données, une table ou encore une colonne dont le nom est un
mot réservé, vous devez l'encadrer de guillemets. Par exemple, comme la fonction
USER()
existe, le nom de la table
user
de la base
mysql
,
et la colonne
User
de cette table, sont des mots réservés, et vous
devez les mettre entre guillemets :
SELECT "User" FROM mysql."user";
|
-
REAL
est synonyme de
FLOAT
au lieu d'être synonyme de
DOUBLE
.
-
Le niveau d'isolation par défaut des transactions est
SERIALIZABLE
.
Syntaxe de
SET TRANSACTION
.
-
Vous pouvez utiliser un champ ou une expression dans une clause
GROUP BY
,
qui ne fait pas partie de la liste des champs.
Lancer le serveur en mode ANSI revient au même que le lancer avec les options suivantes :
--sql-mode=REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY --transaction-isolation=SERIALIZABLE
|
En MySQL 4.1, vous pouvez arriver au même résultat avec ces deux commandes :
SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET GLOBAL sql_mode = "REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY";
|
En MySQL 4.1.1, les options
sql_mode
peuvent être spécifiées avec :
SET GLOBAL sql_mode="ansi";
|
Dans ce cas, la valeur de la variable
sql_mode
prendra toutes les
valeurs pertinentes du mode ANSI. Vous pouvez vérifier le résultat avec la commande :
mysql> SET GLOBAL sql_mode="ansi"; mysql> SELECT @@GLOBAL.sql_mode; -> "REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY,ANSI"
|
|