天天看點

mysql中的sql_mode

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資料庫不允許插入零日期,插入零日期會抛出錯誤而不是警告

大家可以按需對上述選項進行設定與修改。

繼續閱讀