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数据库不允许插入零日期,插入零日期会抛出错误而不是警告
大家可以按需对上述选项进行设置与修改。