Sélectionner les modes SQL
<<<
Exécuter MySQL en mode ANSI MySQL Extensions to the SQL-92 Standard
>>>

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"

<< Exécuter MySQL en mode ANSI >>
Sélectionner les modes SQL Quels standards respecte MySQL? MySQL Extensions to the SQL-92 Standard