网站搬家之mysql 5.7 date类型默认值不能设置‘0000-00-00’的问题

网站搬家,mysql版本由5.6升级到5.7,遇到问题:

mysql 5.7之后版本datetime默认值设置'0000-00-00',出现异常:Invalid default value for 'create_time'

查阅手册

The DATE type is used for values with a date part but no time part. MySQL retrieves and displays DATE values in 'YYYY-MM-DD' format.
The supported range is '1000-01-01' to '9999-12-31'.

mysql 5.7使用NO_ZERO_IN_DATE, NO_ZERO_DATE两个选项,禁止了0000这样的日期和时间,理想的解决办法:

 

将日期、时间格式改成 '1000-01-01' 到 '9999-12-31'之间即可

 

 

而我是利用导入导出SQL文件来搬家,批量替换有点麻烦,一种不推荐方法,在mysql的配置文件中,重新设置sql_mode,去掉这两项就可以了。

 

linux:

 

修改my.cnf文件,重启mysql。

 

Mac:

 

在MacOS中默认是没有my.cnf 文件,如果需要对MySql 进行定制,拷贝/usr/local/mysql/support-files/目录中任意一个.cnf 文件。将它放到其他目录,按照上面修改完毕之后,更名为my.cnf,然后拷贝到/etc目录再重启下mysql就大功告成了。

 

Windows:

 

修改my.ini文件后重启mysql。

 

[mysqld]中添加
sql-mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO

 

查看sql-mode的方法:

mysql数据库的中有一个环境变量sql_mode,定义了mysql应该支持的sql语法,数据校验等

    mysql> select @@sql_mode;  
    +----------------------------------------------------------------+  
    | @@sql_mode                                                     |  
    +----------------------------------------------------------------+  
    | STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |  
    +----------------------------------------------------------------+  

 查看系统变量

    mysql> show variables like 'sql_mode%'\G;    
    *************************** 1. row ***************************    
    Variable_name: sql_mode    
    Value: STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION    
posted @   年来未归客  阅读(8120)  评论(0编辑  收藏  举报
编辑推荐:
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
阅读排行:
· Blazor Hybrid适配到HarmonyOS系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
· 数据并发安全校验处理工具类
点击右上角即可分享
微信分享提示

^_^分享是支持,打赏是认可^_^

您的支持,我的动力

感谢tctip提供技术支持