龙空技术网

Python 之 MySql“未解之谜”06-- 表示时间的用什么类型?

young十三 420

前言:

如今你们对“mysql主键步长”大致比较着重,你们都需要分析一些“mysql主键步长”的相关资讯。那么小编也在网络上汇集了一些有关“mysql主键步长””的相关文章,希望朋友们能喜欢,朋友们一起来了解一下吧!

MySql时间类型普查

上文中我们研究了《阿里巴巴开发手册》

传送门:Python 之 MySql“未解之谜”03--悲剧!一道面试题丢失了offer

摘录:

●【强制】表必备三字段:

id, gmt_create, gmt_modified

说明:其中 id 必为主键,类型为 bigint unsigned、单表时自增、步长为 1。gmt_create, gmt_modified 的类型均为 datetime 类型,前者现在时表示主动创建,后者过去分词表示被动更新

我想80%公司的开发人员不会在每张表中增加2个字段用来保存时间

在实际工作中

如果我们表中只有一个创建时间,会有哪些弊端呢?

● 某些表中有字段表示状态,状态是会发生变更的,如果没有更新时间,后续状态异常,开发人员在定位问题的时候,会有阻力

● 有些业务场景需要根据更新时间排序,创建时间可能会导致数据排序混乱

● 如果中途添加更新时间,不得不处理历史遗留数据

建议:MySql中至少维护2个时间字段(更新时间和创建时间)

也许你创建的表将影响下一看到的开发者

形成一个良性循环

时间格式为什么推荐 datetime 类型,它与 MySql 中其他类型有什么区别呢?

表1

● 不同的时间类型字节大小确定,故我们在使用时可以不设置长度

● 不同的时间类型都有一个取值范围

重点说下DATETIME和TIMESTAMP,格式一样,但是DATETIME的取值范围大于TIMESTAMP,其中的1970是格林威治时间,我们常见的时间戳就是从这个起点开始计算的。

如果你的表字段使用了TIMESTAMP,会出现一个神奇的现象:

明明设置的时间在 TIMESTAMP 范围内,竟然报错了

原来 MySQL 在存储的时候会将 timestamp 类型的字段从当前时区转成 UTC 时区,需要减去 8 小时,所以最后 1970-01-01 08:00:00 这个时间存储到 MySQL 其实变成了 1970-01-01 00:00:00,不在 timestamp 类型的范围内了

当我换成 1970-01-01 08:00:01 ,就顺利保存了

● 表1中的零值表示的是在非严格模式当超过取值范围是使用零值

● 如果对时分秒没有要求,可以使用DATE,比如身份证有效期

● 如果只统计年份,可以使用YEAR,比如说人口普查年份

● 如果是时分秒,可以使用TIME,比如某些苦逼的程序猿上班时间是

09:00:00 ~ 21:00:00

目前使用最多的还是 DateTime,在前端页面展示的时候我们可以格式化,实现不同的效果

如果一万年以后,时间格式范围都失效了,会发生什么?看看谁的脑洞更大?

我先来

MySql 已经 game over 啦

长江后浪拍前浪,MySql die在沙滩上

>>>Python 之 MySql“未解之谜”05--表示金钱的用什么类型?

标签: #mysql主键步长