sql-mode
SQL Modes 預設值
5.6.5 舊版之前,預設定是空的,沒有設置
之後的版本,預設定是 NO_ENGINE_SUBSTITUTION 或 STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_...
查詢目前設定值
SHOW VARIABLES LIKE 'sql_mode';
SELECT @@GLOBAL.sql_mode; --- GLOBAL 是修改目前伺服器的設定值
SELECT @@SESSION.sql_mode; --- SESSION 是修改目前連線的設定值
設定 sql-mode 方式
- 修改設定檔(my.cnf或my.ini)中的 sql-mode="設定值"
MySQL啟動時,加參數 --sql-mode="設定值"
連線登入後修改
SET GLOBAL sql_mode='設定值';SET SESSION sql_mode='設定值';
strict mode (嚴格模式)
STRICT_TRANS_TABLES:對有交易功能的儲存引擎,開啟嚴格模式,也可能對無交易功能的儲存引擎開啟嚴格模式
STRICT_ALL_TABLES:對有所有儲存引擎,開啟嚴格模式。
在「STRICT_TRANS_TABLES」模式中,
對「無交易功能的儲存引擎」的效果,是看不合法語句是否在最前面出現而決定。
當 insert 或 update 的不合法值,是出現在最前面,
則不管儲存引擎是否有交易功能,都是直接出錯中止。
例如:INSERT INTO ww (aa) VALUES (333),(44),(22);
aa 是 tinyint 形態,333 超出範圍,所以直接報錯中止,三個值都無法寫入。
當 insert 或 update 的不合法值,不是出現在最前面。
例如:INSERT INTO ww2 (aa) VALUES (33),(444),(22);
aa 是 tinyint 形態
對「有交易功能的儲存引擎」而言,33、444、22 都無法寫入
對「無交易功能的儲存引擎」而言,三個值都可以寫入,但444會變改成127,也就是變成 33、127、22
結論: STRICT_TRANS_TABLES 在不合法語句在最前面時,才對 「無交易功能的儲存引擎」有作用。