mysql中的日期和时间

服务器数据库5.5,本地5.7在讲远程服务器导入到本地操做的时候,一直在date上报invalid value,最后定位在这样的语句上created_at date no null default '0000-00-00 00:00:00',这里涉及到两个问题:mysql

  1. date日期的格式
  2. 服务器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’)。sql

应用场景

  • date 适用于只使用日期而不使用时间部分, 显示格式YYYY-MM-DD,有效范围1000-01-019999-12-31
  • datetime 适用于包含日期和时间的场景,显示格式YYYY-MM-DD HH:MM:SS,有效范围1000-01-01 00:00:009999-12-31 23:59:59
  • timestamp 使用于包含日期和时间的场景,显示格式YYYY-MM-DD HH:MM:SS,有效范围1970-01-01 00:00:012038-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时间存储为整数,不会带来任何收益,一般不建议这样作。服务器

相关文章
相关标签/搜索