服务器数据库5.5,本地5.7在讲远程服务器导入到本地操作的时候,一直在date上报invalid value,最后定位在这样的语句上created_at date no null default '0000-00-00 00:00:00',这里涉及到两个问题:
date日期的格式
服务器sql-model
正是因为5.7版本对安全方面加强了很多,所以默认的sql-model中有NO_ZERO_DATE,所以导致在插入和设置时,不符合或无效的值不会自动转为'0', 不同的日期类型对应不同的'0',date对应的是0000-00-00。
mysql中共有5种时间类型
year
date
time
datetime
timestamp
注:每种类型都有一个有效的范围,当给某类型设置一个无效值的时候,mysql会自动设置为“0”;timestamp类可以自动更新其时间(前提是sql-model中不包含‘NO_ZERO_DATE’)。
应用场景
date 适用于只使用日期而不使用时间部分, 显示格式YYYY-MM-DD,有效范围1000-01-01到9999-12-31
datetime 适用于包含日期和时间的场景,显示格式YYYY-MM-DD HH:MM:SS,有效范围1000-01-01 00:00:00到9999-12-31 23:59:59
timestamp 使用于包含日期和时间的场景,显示格式YYYY-MM-DD HH:MM:SS,有效范围1970-01-01 00:00:01到2038-01-19 03:14:07UTC,客户端时间会 根据时区自动转换
注:datetime和timestamp都可以添加6位分数部分来支持微妙精度,如2016-10-19 12:27: 33.999999
常用类型
datetime和timestamp对很多程序都能工作,但是某些场景下,却有优劣之分。datetime将时间封装在YYYYMMDDHHMMSS的整数中,与时区无关,并使用8个字节空间;timestamp使用4个字节,所以它的范围更短,如上所述,并且和时区紧密相关,同时timestamp会自动更新,列默认属性也是not null.
注:将unix时间存储为整数,不会带来任何收益,通常不建议这样做。
来源:oschina
链接:https://my.oschina.net/u/1249401/blog/760058