mysql中的sql_mode就是控制mysql行為模式的一些配置。檢視mysql的sql_mode可通過以下語句:
select @@sql_mode;
或:
show variables like "sql_mode";
可以看到所有的sql_mode:
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
NO_ENGIN_SUBSTITUTION
其中,NO_ENGIN_SUBSTITUTION表示當建立表時,指定一個不存在的存儲引擎時,mysql是報錯還是設定成預設存儲引擎innodb;經過實驗發現:當sql_mode中含有NO_ENGIN_SUBSITUTION這一項時,在建立表指定一個不存在的存儲引擎,mysql會報錯(substitution意為替換)。反之,則會設定成預設的innodb。
修改sql_mode,如果想去除sql_mode中某個選項,可用如下語句:
set sql_mode = (select replace(@@sql_mode, 'NO_ENGINE_SUBSTITUTION', ''));
NO_AUTO_CREATE_USER
禁止mysql建立密碼為空的使用者,如果sql_mode中含有該選項,那麼建立mysql使用者 時如果不設定密碼則會報錯。
NO_ZERO_IN_DATE
在嚴格模式下,不允許日期和月份為零
NO_ZERO_DATE
設定該值,mysql資料庫不允許插入零日期,插入零日期會抛出錯誤而不是警告
大家可以按需對上述選項進行設定與修改。