查看當前的 SQL_MODE
SELECT @@sql_mode
SELECT @@sql_mode 的執行結果
mysql> SELECT @@sql_mode;
+-----------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-----------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
設置 SQL_MODE
設置 SQL_MODE 是通過 SET
關鍵詞進行的,其他參數值也可通過該關鍵詞進行修改。可通過 SHOW VARIABLES
查看到所有可用配置項。
設置系統變量時,可指定所設置的作用域,也可通過 @@
前綴來獲取變量,甚至也可以沒有任何前綴,以下寫法都是合法的:
SET SESSION sql_mode = 'TRADITIONAL';
SET LOCAL sql_mode = 'TRADITIONAL';
SET @@SESSION.sql_mode = 'TRADITIONAL';
SET @@LOCAL.sql_mode = 'TRADITIONAL';
SET @@sql_mode = 'TRADITIONAL';
SET sql_mode = 'TRADITIONAL';
可用的 SQL 模式可在官方文檔中查詢到 5.1.10 Server SQL Modes。
系統變量的作用域
There are two scopes in which system variables exist. Global variables affect the overall operation of the server. Session variables affect its operation for individual client connections. A given system variable can have both a global and a session value.
系統的這些配置項有其作用項,是分開進行管理的。
其中,
GLOBAL
類型會對每次連接生效。SESSION
類型只對當前連接生效,LOCAL
關鍵詞等效。
兩者皆為運行時變量,可隨時修改。
PERSIST
類型不影響運行時,會將設置結果寫入mysqld-auto.cnf
這個 MySQL 配置文件。
所以,設置時可通過在 SET
后加相應作用域的修飾詞,像這樣
SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';
也可以通過 @@
加上作用域進行變量訪問的方式:
SET @@GLOBAL.sql_mode = 'NO_ENGINE_SUBSTITUTION';
兩者是等效的。
作用域缺省情況下為 SESSION
類型,即只對當前連接生效。
SET @@sql_mode = 'NO_ENGINE_SUBSTITUTION';
MySQL 中的配置文件
下面表格來自官方文檔 Table 4.2 Option Files Read on Unix and Unix-Like Systems 部分。
文件 | 用途 |
---|---|
/etc/my.cnf | 全局配置項 |
/etc/mysql/my.cnf | 全局配置項 |
SYSCONFDIR/my.cnf | 全局配置項 |
$MYSQL_HOME/my.cnf | 服務器相關配置項,有於服務端 |
defaults-extra-file | 如果存在該文件的話,通過--defaults-extra-file 參數啟用程序時會讀取該配置項 |
~/.my.cnf | 用戶配置項 |
~/.mylogin.cnf | 用戶登錄路徑相關,用於客戶端 |
DATADIR/mysqld-auto.cnf | SET PERSIST 或 SE PERSIST_ONLY 設置的系統參數會保存到該文件 |