首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL ANSI 模式啟用指南:sql_mode 設定與版本差異

     編輯:MySQL 資料庫相關知識

啟用方式

啟動參數法(所有版本)

mysqld --ansi

等效於設定:

--transaction-isolation=SERIALIZABLE
--sql-mode=REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE

執行期動態設定(MySQL 4.1+)

SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET GLOBAL sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE';

簡寫模式(MySQL 4.1.1+)

SET GLOBAL sql_mode = 'ANSI';

驗證:

SELECT @@global.sql_mode;
-- 輸出:REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI

ANSI 模式關鍵行為變更

  • ANSI_QUOTES:雙引號識別為識別符(資料表/欄位名),字串必須用單引號
  • PIPES_AS_CONCAT:|| 視為字串串聯而非邏輯 OR
  • REAL_AS_FLOAT:REAL 視為 FLOAT 同義詞
  • IGNORE_SPACE:函數名與括號間允許空格
  • SERIALIZABLE 隔離等級:最高隔離,避免幻讀但並發度最低

遷移建議

  1. 開發/測試環境先啟用 sql_mode=ANSI 跑測試套件
  2. 檢查應用程式 SQL 是否使用雙引號字串、|| 邏輯 OR 等不相容寫法
  3. 生產環境灰度發布,監控錯誤率與效能指標
  4. 長期建議:明確列出所需 sql_mode 組合(如 STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION),避免依賴預設值變更
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved