définir le sql_mode global dans mysql

J’essaie de définir sql_mode dans mysql mais cela génère une erreur.

Commander:

set global sql_mode='NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLE','NO_AUTO_CREATE_USER','NO_ENGINE_SUBSTITUTION' 

N’est-ce pas la bonne façon de définir plusieurs modes? Quels sont les avantages de la configuration des modes session et global? qui est préféré? J’ai différents utilisateurs qui tentent de mettre à jour la firebase database avec différentes valeurs UNC et installe le mode de session sur «NO_BACKSLASH_ESCAPES», mais je pense que cela pourrait être un bon mode pour cela. Est-ce que ça a du sens?

S’il vous plaît, faites-moi savoir.

Merci.

BTW, si vous définissez des globals dans MySQL:

 SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION'; SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION'; 

Cela ne le définira pas de manière PERMANENTE , et il reviendra après chaque redémarrage.

Vous devriez donc définir ceci dans votre fichier de configuration (par exemple /etc/mysql/my.cnf dans la section [mysqld]), de sorte que les modifications restnt effectives après le redémarrage de MySQL:

Fichier de configuration: /etc/mysql/my.cnf

 [mysqld] sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

MISE À JOUR: Les versions plus récentes de Mysql (par exemple, 5.7.8 ou plus) peuvent nécessiter une syntaxe légèrement différente:

 [mysqld] sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" 

Assurez-vous qu’il y a un tiret entre sql-mode non un trait de soulignement, et que les modes sont entre guillemets.

Toujours référencer les documents MySQL pour votre version pour voir les options du mode sql .

Je l’ai résolu.

le mode correct est:

 set global sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 

Définir le mode SQL de manière permanente en utilisant le fichier de configuration mysql.

Dans mon cas, je dois changer le fichier /etc/mysql/mysql.conf.d/mysqld.cnf car mysql.conf.d est inclus dans /etc/mysql/my.cnf . je change ceci sous [mysqld]

 [mysqld] sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 

vient de supprimer ONLY_FULL_GROUP_BY mode SQL car il provoquait un problème.

J’utilise ubuntu 16.04 , php 7 et mysql –version me donne ce mysql Ver 14.14 Dissortingb 5.7.13, for Linux (x86_64) using EditLine wrapper

Après ce changement, passez sous les commandes

 sudo service mysql stop sudo service mysql start 

Maintenant, vérifiez les modes SQL par cette requête SELECT @@sql_mode et vous devriez avoir les modes que vous venez de définir.

Copier dans le fichier de configuration: /etc/mysql/my.cnf OR /bin/mysql/my.ini

 [mysqld] port = 3306 sql-mode="" 

MySQL redémarre.

Ou vous pouvez aussi faire

 [mysqld] port = 3306 SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; 

MySQL redémarre.

Dans mon cas, je dois changer le fichier /etc/mysql/mysql.conf.d/mysqld.cnf changer ceci sous [ mysqld ]

Collez cette ligne sur la partie [ mysqld ]

 sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 
 définir global sql_mode = "NO_BACKSLASH_ESCAPES, STRICT_TRANS_TABLE, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION"