SQL_MODE 的設置


查看當前的 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.

--5.1.9 Using System Variables

系統的這些配置項有其作用項,是分開進行管理的。

其中,

  • 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 PERSISTSE PERSIST_ONLY 設置的系統參數會保存到該文件

相交資源


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM