2010-02-23 229 views
30

我想在mysql中設置sql_mode,但它會引發錯誤。在mysql中設置全局sql_mode

命令:

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

這難道不是設置多種模式的正確方法? 設置會話和全局模式的優點是什麼?哪些是優先? 我有不同的用戶試圖用不同的UNC值更新數據庫,並試圖將會話模式設置爲'NO_BACKSLASH_ESCAPES',但我認爲這對於gloabl模式是有意義的。這有意義嗎?

請讓我知道。

謝謝。

+0

那些錯誤的報價真的打擾我,P。正如其他人所說,我相信,這絕對是不正確的,正因爲如此。 – 2017-05-07 00:51:58

回答

15

我解決了它。

正確的模式是:

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

警告:根據我們的經驗,這不會保留MySQL重新啓動後的設置... – 2014-09-29 15:25:38

+0

是的,這不會保留設置後重新啓動 – PRP 2016-05-12 21:19:50

+2

爲了在unix重新啓動後保留它,我必須創建一個〜/ .my.cnf文件和添加[mysqld] sql_mode =「」。希望這會有所幫助 – 2016-05-26 09:06:27

82

順便說一句,如果你在MySQL設置全局:

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

這不會把它永久性,每次重啓後會恢復。

所以,你應該設置這個在您的配置文件(如/etc/mysql/my.cnf中的[mysqld]部分),這樣的更改仍然有效MySQL的重新啓動後:

配置文件中:/ etc/MySQL的/我的.CNF

[mysqld] 
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

UPDATE:較新的版本的MySQL(例如5.7.8或更高)可能需要稍微不同的語法:

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

請確保sql-moden之間沒有下劃線之間的連字符,並且這些模式用雙引號引起來。

始終引用MySQL Docs版本看​​。

+0

謝謝,my.cnf中的設置對我來說確實有效。對於那些有興趣的人來說,這個頁面告訴你默認的sql_modes在5.7及以上版本:http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html – Richard 2016-08-24 14:38:24

+0

5.7版本注意! 這是問題所在。 – 2017-06-02 12:43:47

+0

這是有效的。謝謝 – 2018-01-16 02:25:11

7

複製到配置文件:/etc/mysql/my.cnf OR /bin/mysql/my.ini

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

MySQL重啓。

或者你也可以做

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

MySQL重啓。

+2

我認爲它是'sql_mode'而不是' SQL-mode'。 – 2016-10-19 05:51:47

+0

都可以用 – 2016-10-24 05:29:20

+0

@RamanSahasi取決於什麼版本。 – 2017-06-02 12:44:35

9

使用mysql配置文件永久設置sql模式。

在我的情況下,我必須將文件/etc/mysql/mysql.conf.d/mysqld.cnf更改爲mysql.conf.d包含在/etc/mysql/my.cnf中。我改變這種下的[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 SQL模式,因爲它是造成問題。

我使用ubuntu 16.04php 7和mysql --version給我這個mysql Ver 14.14 Distrib 5.7.13, for Linux (x86_64) using EditLine wrapper

後這種變化之下運行命令

sudo service mysql stop 
sudo service mysql start 

現在這個查詢SELECT @@sql_mode檢查SQL模式,你應該得到模式,你剛剛設置。

1

對我來說,我必須要改變文件/etc/mysql/mysql.conf.d/mysqld.cnf下[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"