Mysql的sql_mode模式

孤街醉人 提交于 2020-02-29 08:55:33

sql_mode

   是一个很容易被忽视的配置,宽松模式下可能会被输入一些非准确数据,所以生产环境下会要求为严格模式,为了保持生产环境和开发环境,测试环境一致性,我们开发环境和测试环境也要配置成为严格模式。

sql_mode常用值

ONLY_FULL_GROUP_BY:在分组查询语句中如果一个select中的列没有在group by中出现,则该语句是不合法的。

NO_AUTO_VALUE_ON_ZERO:在默认情况下自增长列在插入0或NULL时会自动插入下一个自增长值。当设置该模式情况下,插入0时不会进行自增长依然插入0值。

STRICT_TRANS_TABLES:对事务表进行限制,当一个数据不能插入到事务表中时中断当前操作。对非实物表不做限制。

NO_ZERO_IN_DATE:只要日期的月和日中含有0值都报错,但是‘0000-00-00’除外。

NO_ZERO_DATE:只有‘0000-00-00’报错。

ERROR_FOR_DIVISION_BY_ZERO:在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如果非该模式下被0除时mysql返回NULL。

NO_AUTO_CREATE_USER:禁止创建密码为空的用户。

NO_ENGINE_SUBSTITUTION:如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常。

PIPES_AS_CONCAT:将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似。

ANSI_QUOTES:启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符。

Oracle数据库切换为mysql数据库

只需要修改sql_mode为:PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER。

修改sql_mode模式

通过 "SELECT @@sql_mode;"查看当前数据库模式,修改“SET sql_mode = ‘修改为模式’; ”。这种方式只在当前session生效。

同理:select @@global.sql_mode  和 set global sql_mode = '修改后的值';只在当前服务中生效,重启后失效。

修改my.cnf文件重启,永久生效。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!