impostazione di sql_mode globale in mysql

Sto cercando di impostare sql_mode in mysql ma genera un errore.

Comando:

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

Non è questo il modo corretto per impostare più modalità? Quali sono i vantaggi di impostare la sessione e le modalità globali? che è preffered? Ho diversi utenti che tentano di aggiornare il database con diversi valori UNC e ho impostato l’impostazione della modalità sessione su “NO_BACKSLASH_ESCAPES”, anche se sarebbe logico per questa modalità. Ha senso ciò?

Per favore mi faccia sapere.

Grazie.

BTW, se imposti globals in MySQL:

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

Questo non lo imposterà PERMANENTEMENTE e ritornerà dopo ogni riavvio.

Quindi dovresti impostarlo nel tuo file di configurazione (ad esempio /etc/mysql/my.cnf nella sezione [mysqld]), in modo che le modifiche rimangano in vigore dopo il riavvio di MySQL:

File di configurazione: /etc/mysql/my.cnf

 [mysqld] sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

AGGIORNAMENTO: le versioni più recenti di Mysql (ad esempio 5.7.8 o successive) possono richiedere una syntax leggermente diversa:

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

Assicurati che ci sia un trattino tra la sql-mode non un trattino basso e che le modalità siano tra virgolette.

Fare sempre riferimento ai documenti MySQL per la propria versione per visualizzare le opzioni in modalità sql .

L’ho risolto.

la modalità corretta è:

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

Impostazione della modalità sql in modo permanente utilizzando il file di configurazione mysql.

Nel mio caso devo cambiare il file /etc/mysql/mysql.conf.d/mysqld.cnf come mysql.conf.d è incluso in /etc/mysql/my.cnf . lo cambio sotto [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" 

ONLY_FULL_GROUP_BY appena rimosso la modalità ONLY_FULL_GROUP_BY perché causava problemi.

Sto usando ubuntu 16.04 , php 7 e mysql –version dammi questo mysql Ver 14.14 Distrib 5.7.13, for Linux (x86_64) using EditLine wrapper

Dopo questa modifica, esegui i comandi sottostanti

 sudo service mysql stop sudo service mysql start 

Ora controlla le modalità sql con questa query SELECT @@sql_mode e dovresti ottenere le modalità che hai appena impostato.

Copia nel file di configurazione: /etc/mysql/my.cnf OR /bin/mysql/my.ini

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

Riavvio MySQL .

Oppure puoi anche farlo

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

Riavvio MySQL .

Nel mio caso devo cambiare il file /etc/mysql/mysql.conf.d/mysqld.cnf cambia questo sotto [ mysqld ]

Incolla questa linea sulla porzione [ 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" 
 imposta global sql_mode = "NO_BACKSLASH_ESCAPES, STRICT_TRANS_TABLE, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION"