2010-02-23 10 views
30

Sto provando a impostare sql_mode in mysql ma genera un errore.impostazione globale sql_mode in mysql

Comando:

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

Non è questo il modo corretto di impostare molteplici modalità? Quali sono i vantaggi di impostare le modalità di sessione e 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 fatemi sapere.

Grazie.

+0

quelle citazioni erranti mi preoccupa; p. Come altri hanno detto sono sicuro, questo non è assolutamente giusto solo per quello. –

risposta

15

Ho risolto.

la modalità corretta è:

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

ATTENZIONE: Nella nostra esperienza questo non mantiene l'impostazione dopo un riavvio MySQL ... –

+0

Sì, questo non mantiene le impostazioni dopo il riavvio – PRP

+2

Per conservarlo dopo il riavvio per Unix, ho dovuto creare un file ~/.my.cnf e aggiungi [mysqld] sql_mode = "". Spero che questo aiuti –

82

A proposito, se si impostano le variabili globali in MySQL:

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

questo non impostarla PERMANENTE, e sarà tornare dopo ogni riavvio.

così si dovrebbe impostare questo nel file di configurazione (ad esempio /etc/mysql/my.cnf nella sezione [mysqld]), in modo che le modifiche rimangono in vigore dopo un riavvio di MySQL: File

Config:/etc/mysql/mia .cnf

[mysqld] 
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

UPDATE: Le versioni più recenti di MySQL (es 5.7.8 o superiore) può richiedere sintassi leggermente diversa:

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

Assicurarsi che vi sia un trattino tra sql-moden e non un carattere di sottolineatura e che le modalità siano tra virgolette.

riferimento sempre il MySQL Docs per tuo versione per vedere il sql-mode options.

+0

Grazie, l'impostazione in my.cnf ha fatto il trucco per me. Per chi fosse interessato, questa pagina ti dice quali sono le sql_mode predefinite in 5.7 e successive: http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html – Richard

+0

5.7 versione note up! Questo era il problema. –

+0

Funziona. Grazie –

7

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

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

MySQL riavvio.

Oppure si può anche fare

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

MySQL riavvio.

+2

Penso che sia' sql_mode' invece di ' sql-mode'. –

+0

entrambi possono essere utilizzati –

+0

@RamanSahasi dipende da quale versione. –

9

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.cambio questo 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" 

appena rimosso modalità ONLY_FULL_GROUP_BY SQL causa che stava causando problema.

Sto usando ubuntu 16.04, php 7 e mysql --version darmi questa mysql Ver 14.14 Distrib 5.7.13, for Linux (x86_64) using EditLine wrapper

Dopo questa modifica correre sotto i comandi

sudo service mysql stop 
sudo service mysql start 

Ora Controlla modi sql da questa query SELECT @@sql_mode e si dovrebbe ottenere i modi che hai appena impostato.

1

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

incollare questa linea su [mysqld] Parte

sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 
Problemi correlati