mysql中的日期和时间

倾然丶 夕夏残阳落幕 提交于 2020-02-29 05:38:53

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

  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’)。

应用场景

  • 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时间存储为整数,不会带来任何收益,通常不建议这样做。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!