sql_mode
- ANSI
- TRADITIONAL
- STRICT_TRANS_TABLES
sql_mode為空
最寬松的模式, 即使有錯誤既不會報錯也不會有警告⚠️
ANSI
寬松模式,對插入數據進行校驗,如果不符合定義類型或長度,對數據類型調整或截斷保存,報warning警告
TRADITIONAL
嚴格模式,當向mysql數據庫插入數據時,進行數據的嚴格校驗,保證錯誤數據不能插入,報error錯誤。用於事物時,會進行事物的回滾
STRICT_TRANS_TABLES
嚴格模式,進行數據的嚴格校驗,錯誤數據不能插入,報error錯誤
NO_ENGINE_SUBSTITUTION
no_engine_subtitution的作用:mysql 在create table 時可以指定engine子句(指定存儲引擎),如果把引擎指定成一個並不存在的引擎, 這個時候mysql可以有兩種行為供選擇
- 直接報錯
- 把表的存儲引擎替換成innodb
如果 sql_mode 存在 no_engine_subtitution 的時候 ===> 直接報錯
如果 sql_mode 不存在 no_engine_subtitution 的時候 ===> 把表的存儲引擎替換成innodb
查詢 sql_mode
1 |
mysql> select @@sql_mode; |
在線修改 sql_mode
SET [GLOBAL|SESSION] sql_mode='modes'
當前 session 生效
1 |
mysql> set sql_mode=`NO_FIELD_OPTIONS,HIGH_NOT_PRECEDENCE`; |
全局生效
1 |
mysql> set global sql_mode=`NO_FIELD_OPTIONS,HIGH_NOT_PRECEDENCE` |
離線修改 sql_mode
1 |
➜ ~ vim /etc/my.cnf |