#4 MySQL set 类型
DB MySQL 2014-08-20顾名思义,就是集合类型。
set('a', 'b', ...)
每个字段可以是指定选项中的若干个(包含 0 个)。
coding in a complicated world
顾名思义,就是集合类型。
set('a', 'b', ...)
每个字段可以是指定选项中的若干个(包含 0 个)。
varchar(14)
,存:yyyymmddHHMMSS
格式varchar(19)
,存:yyyy-mm-dd HH:MM:SS
格式varchar(23)
,存:yyyy-mm-dd HH:MM:SS.fff
格式varchar(26)
,存:yyyy-mm-dd HH:MM:SS.ffffff
格式varchar(24)
,存:yyyy-mm-ddTHH:MM:SS+0800
或 yyyy-mm-dd HH:MM:SS 0800
格式int
1970 - 2038time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime((1 << 31) - 1))
# 2038-01-19 03:14:07
- int unsigned
1970 - 2106time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime((1 << 32) - 1))
# 2106-02-07 06:28:15
- bigint
可以用到世界毁灭2020-01-01 00:00:00
TIMESTAMP
类型int
类型,2038 问题DATETIME
类型PS: DATE
, TIME
, YEAR
三种类型:
DATE
TIME
YEAR
Timestamp 是按 UTC 时间进行存储。
MySQL 的 timestamp
类型挺好的,不过有个严重的 2038 问题,我不知道到时候这个类型会如何处理。
The TIMESTAMP data type is used for values that contain both date and time parts. TIMESTAMP has a range of '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC.
(1 << 31) / (3600 * 24 * 365)
根据时间范围,这应该是用的一个有符号的 32 位整型数实现的,为什么不用无符号数呢,不是又可以往后续 68 年么?
我预测,MySQL 的某一个新版本,将会增加一个 TIMESTAMP64
类型,采用 64 位有符号整形数存时间戳。
或直接将 TIMESTAMP
拓展到 64 位,先支持配置和命令行参数开启这个特性,然后后续版本将其视作默认设置。
MySQL 出现了一个问题,插入一个长字符串(二十几KB)结果导致被截断。