网站搬家之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    
时间: 2024-10-06 17:16:00

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

C#把对象类型转化为指定类型,转化失败时返回该类型默认值

/// <summary> ///通用类型扩展方法类 /// </summary> public static class ObjectExtensions { /// <summary> ///把对象类型转化为指定类型,转化失败时返回该类型默认值 /// </summary> /// <typeparam name="T"> 动态类型 </typeparam> /// <param name="v

向mysql中插入Date类型的数据

先看数据库表的定义 date字段为sql.date类型.我要向其中插入指定的日期和当前日期. 一.插入当前日期 思路:先获取当前系统,在将当前系统时间转换成sql类型的时间,然后插入数据库.代码如下 public static void insert_now() throws ClassNotFoundException, SQLException{ java.util.Date utilDate = new Date(); //获取java.util.Date对象---也即当前时间 java.

Javascript Date 类型的值传递与引用传递问题

新建一个Date类型的变量 d1. <span style="font-family:Microsoft YaHei;font-size:14px;">var d1 = new Date(); alert(d1);</span> 运行后页面上会弹出: Fri Sep 05 2014 16:40:50 GMT+0800 再新建一个变量 d2, 将 d1的值赋给d2,   把d2 的 年份设置为 2013, <span style="font-fam

MySQL数据库储存bit类型的值报错

当我们储存bit类型的值时,不能直接写入数字 上图中的画圈部分就是bit类型,若是直接填入"1"或"0"等等就会报错,如下: 这时候,我们要看bit(M)的M值是多少,若M=4,则写成b'0001';若M=6,则写成b'000001'即可

Java实体Date类型属性值无法保存到数据表对应字段的问题

项目框架: maven+springMVC+mybatis 实体属性: //推荐时间private java.util.Date recommendDate; 数据库字段: ALTER TABLE `resource`ADD COLUMN `RECOMMEND_DATE`  date NULL COMMENT '推荐时间'; 属性赋值: resource.setRecommendDate(DateUtils.getNowDate()); 相关方法: 获取现在时间 /** * 获取现在时间 * *

pl/sql developer 设置oracle的date类型默认显示样式

oracle里默认的date显示样式: 我的是汉化过的: 进入后,点击工具->首选项->日期/时间设置即可: 设置后在pl/sql developer中查看: 英文版的操作步骤: Tools --> Preferences... --> 左侧User Interface中的Date/Time

MySQL MyISAM引擎更改列默认值优化

如果需要更改某一列的的默认值属性 如: ALTER TABLE USER MODIFY COLUMN NAME VARCHAR(64) DEFAULT 'DEFAULT_USER'; 这样会导致整个表被锁,所有的行都更新完毕锁资源才会释放. 这种情况下可以使用这种命令 ALTER TABLE USER ALTER COLUMN NAME SET DEFAULT 'DEFAULT_USER'; 瞬间完成.因为它更改的只是.frm文件.

Oracle数据库date类型与Java中Date的联系与转化

以下是对Java中的日期对象与Oracle中的日期之间的区别与联系做点说明,以期对大家有所帮助.new Date():分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),就是系统当前.new Date(long date) : 分配 Date 对象并初始化此对象,以表示自从标准基准时间    (称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数.long getTime() :返回自 1970 年 1 月 1 日 00:00

mysql修改表中某个字段的默认值

Mysql中用SQL增加.删除字段,修改字段名.字段类型.注释,调整字段顺序总结 在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或字段的注释,把同字段属性调整到一块儿.这些操作可以在phpmyadmin或者别的mysql管理工具中完成,但是我们有时为了更方便的管理,会选择写sql语句来实现. 1.增加一个字段  代码如下 复制代码 //增加一个字段,默认为空alter table user add COLUMN new1 VA