关于MYSQL5.7+的严格模式

逆风 系统维护评论166字数 800阅读模式

概述

博主今天将另一个测试网站(Emlog程序)服务器的MYSQL升级到了5.7版本
升级完之后,打开网站便报错数据库
阅读相关文档,发现MYSQL5.7版本的“严格模式”是打开的

简述严格模式

[scode type="share"]严格模式控制MySQL如何处理非法或丢失的输入值的SQL。有几种原因可以使一个值为非法。例如,数据类型错误或超出范围。当新插入的行不包含某列的没有显示定义DEFAULT子句的值,则该值被丢失。

对于事务表,当启用STRICT_ALL_TABLES或STRICT_TRANS_TABLES模式时,如果语句中有非法或丢失值,则会出现错误。SQL语句被回滚。

对于非事务表,STRICT_TRANS_TABLES,MySQL将非法值转换为最接近该列的合法值并插入调整后的值。如果值丢失,MySQL在列中插入隐式 默认值。在任何情况下,MySQL都会生成警告而不是给出错误并继续执行语句。

如果你不使用严格模式(即不启用STRICT_TRANS_TABLES或STRICT_ALL_TABLES模式),对于非法或丢失的值,MySQL将插入调整后的值并给出警告。在严格模式,你可以通过INSERT IGNORE或UPDATE IGNORE来实现。[/scode]

如何关闭

Linux

打开MYSQL的安装目录
找到my.cnf 进行编辑
查找

sql-mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

修改为

sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

若找不到就在[mysqld]下添加即可

重启MYSQL:

sudo /etc/init.d/mysql restart

Windows

在MYSQL安装目录中找到mysql.ini

同Linux一样修改

然后重启MYSQL或者服务器

转载请保留原文链接
逆风
  • 本文由 发表于 2020年3月7日 14:55:00
  • 转载请务必保留本文链接:https://blog.smallxu.com/post/75/
评论  0  访客  0
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: