之前在工作的时候,在自己的服务器上部署了工作室的项目方便在线下进行模拟调试修复Bug。但是在将工作室数据库数据传输到我自己的服务器时却报了个错,1067 – Invalid default value for ‘字段名’。仔细看原来工作室的数据库版本是5.6的,我服务器本地的版本是5.7。所以导致有些数据不兼容,我那时候报的错是Invalid default value for 'createTime',是时间字段,类型是datetime。然后就想到可能是时间类型的默认值被限制了,然后我就去查看 sql_mode。果然:NO_ZERO_IN_DATE,NO_ZERO_DATE这两个参数被限制不能为0。
进入到MySQL命令行操作界面
查看sql_mode
会话级别
select @@session.sql_mode;
全局级别
select @@global.sql_mode;
修改sql_mode
临时修改
该级别为会话级别的修改,session均可省略,默认session,仅对当前会话有效
set @@session.sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
该级别为全局级别的修改,但也是临时修改,需高级权限,仅对下次连接生效,不影响当前会话,且MySQL重启后失效。因为MySQL重启时会重新读取配置文件里对应值,如果需永久生效需要修改配置文件里的值。
set global sql_mode='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
set @@global sql_mode='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
永久修改
打开my.ini文件,找到以下语句
sql-mode = "xx_mode"
替换为以下,如果找不到就在空白处新加
sql-mode ='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
新加完后重启MySQL服务即可,重新进行数据传输此时便不会报错
各位看官老爷,收藏起来呗,万一以后用得到呢,再不行点个赞再走/(ㄒoㄒ)/~~
(以上内容仅供学习参考,若有错误之处欢迎指正交流)