web-dev-qa-db-fra.com

MySQL: définition permanente de sql_mode

Via le client de ligne de commande MySQL, j'essaie de définir le mysql_mode global:

SET GLOBAL sql_mode = TRADITIONAL;

Cela fonctionne pour la session en cours, mais après avoir redémarré le serveur, le sql_mode revient à sa valeur par défaut: '', une chaîne vide.

Comment puis-je définir définitivement sql_mode sur TRADITIONNEL?

Le cas échéant, MySQL fait partie du package WAMP.

Merci.

26
George Newton

Ajoutez ceci à votre fichier my.cnf (ou my.ini si vous utilisez Windows):

sql_mode="TRADITIONAL"

et redémarrez le serveur

21
fancyPants

MySQL sql_mode "TRADITIONAL", a.k.a. "mode strict", est défini par les documents MySQL comme:

"Donner une erreur au lieu d'un avertissement" lors de l'insertion d'une valeur incorrecte dans une colonne.

Voici comment vous assurer que votre sql_mode est défini sur "TRADITIONAL".

Tout d'abord, vérifiez votre paramètre actuel:

mysql
mysql> SELECT @@GLOBAL.sql_mode;
+-------------------+
| @@GLOBAL.sql_mode |
+-------------------+
|                   |
+-------------------+
1 row in set (0.00 sec)

Ceci est retourné vide, la valeur par défaut, c'est mauvais: votre sql_mode n'est pas défini sur "TRADITIONNEL".

Modifiez donc le fichier de configuration:

Sudo vim /etc/mysql/my.cnf

Ajoutez cette ligne dans la section intitulée [mysqld]: sql_mode="TRADITIONAL" (comme l'a souligné fancyPants)

Redémarrez ensuite le serveur:

Sudo service mysql restart

Ensuite, vérifiez à nouveau:

mysql
mysql> SELECT @@GLOBAL.sql_mode;
+------------------------------------------------------------------------------------------------------------------------------------------------------+
| @@GLOBAL.sql_mode                                                                                                                                    |
+------------------------------------------------------------------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Succès! Tu es dorée maintenant.

22
Michael Currie