Mysql的sql_mode模式

sql_mode

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

sql_mode经常使用值

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

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

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

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

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

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

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文件重启,永久生效。

相关文章
相关标签/搜索