2010-02-23 12 views
30

Ich versuche, sql_mode in mysql setzen, aber es wirft einen Fehler.Einstellung globalen sql_mode in mysql

Befehl:

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

Ist dies nicht der richtige Weg, um mehrere Modi einzustellen? Was sind die Vorteile der Einstellung von Session- und Global-Modi? Welches ist bevorzugt? Ich habe verschiedene Benutzer versucht, die Datenbank mit verschiedenen UNC-Werten zu aktualisieren und den Sitzungsmodus auf 'NO_BACKSLASH_ESCAPES' einzustellen, obwohl es sinnvoll wäre, dafür einen globalen Modus zu verwenden. Macht das Sinn?

Bitte lassen Sie es mich wissen.

Danke.

+0

Diese verirrten Zitate wirklich stört mich; p. Wie andere sagten, bin ich mir sicher, das ist definitiv nicht richtig, gerade deswegen. –

Antwort

15

Ich löste es.

der richtige Modus ist:

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

WARNUNG: Nach unserer Erfahrung behält dies die Einstellung nach einem MySQL-Neustart nicht bei ... –

+0

Ja, das behält die Einstellungen nach dem Neustart nicht bei – PRP

+2

Um es nach dem Neustart für Unix zu behalten, musste ich eine ~/.my.cnf-Datei erstellen füge [mysqld] sql_mode = "" hinzu. Hoffe, das hilft –

82

BTW, wenn Sie die Globals in MySQL gesetzt:

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

Dies setzt nicht DAUERHAFT, und es wird nach jedem Neustart zurückgesetzt.

So sollen Sie dies in Ihrer Konfigurationsdatei festgelegt (zB /etc/mysql/my.cnf im Abschnitt [mysqld]), so dass die Änderungen in Kraft bleiben, nach einem MySQL-Neustart:

Datei Config:/etc/mysql/my .CNF

[mysqld] 
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

UPDATE: Neuere Versionen von Mysql (zB 5.7.8 oder höher) können geringfügig unterschiedliche Syntax erfordert:

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

Stellen Sie sicher, dass zwischen sql-moden ein Bindestrich und kein Unterstrich steht und dass die Modi in Anführungszeichen stehen.

Referenz immer die MySQL Docs für Ihre Version der sql-mode options zu sehen.

+0

Danke, Einstellung in my.cnf hat den Trick für mich getan. Für diejenigen, die interessiert sind, diese Seite sagt Ihnen, was die Standard-sql_modes in 5.7 und höher sind: http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html – Richard

+0

5.7 Version Hinweis! Das war das Problem. –

+0

Es funktioniert. Danke –

7

kopieren Config File: /etc/mysql/my.cnf OR /bin/mysql/my.ini

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

MySQL Neustart.

Oder Sie können auch

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

MySQL Neustart tun.

+2

Ich denke es ist' sql_mode' statt '' SQL-Modus'. –

+0

beide können verwendet werden –

+0

@RamanSahasi hängt davon ab, welche Version. –

9

Den SQL-Modus permanent mit der Konfigurationsdatei mysql einstellen.

In meinem Fall muss ich Datei /etc/mysql/mysql.conf.d/mysqld.cnf als mysql.conf.d ändern wird in /etc/mysql/my.cnf enthalten.i ändern dies unter [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" 

nur ONLY_FULL_GROUP_BY SQL-Modus entfernt weil es Problem verursacht wurde.

Ich verwende ubuntu 16.04, php 7 und mysql --version gib mir dieses mysql Ver 14.14 Distrib 5.7.13, for Linux (x86_64) using EditLine wrapper

Nachdem diese Änderung unter Befehle ausführen

sudo service mysql stop 
sudo service mysql start 

Jetzt SQL-Modi von dieser Abfrage SELECT @@sql_mode überprüfen und Sie sollten Modi erhalten, du hast gerade erst angefangen.

1

In meinem Fall habe ich Datei ändern /etc/mysql/mysql.conf.d/mysqld.cnf dies ändern unter [mysqld]

diese Zeile einfügen auf [mysqld] Teil

sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 
Verwandte Themen