MySQL date、datetime和timestamp类型的区别

Date只存储日期; Datetime 存储日期和时间,时间戳包含时区。
日期为3 个字节;日期时间为 8 个字节,时间戳为 4 个字节。
时间戳有2 03 8 问题。
日期索引很快。

在 MySQL 中 DATETIME 和 TIMESTAMP 的区别及使用场景 - 实战案例讲解

上周,我的朋友在使用MySQL数据库设计表结构时遇到了选择DATETIME或TIMESTAMP的问题。
他发现,虽然这两个字段都可以存储日期和时间,并且格式相似,但在应用上还是有所不同。

他说,首先,DATETIME的表示范围更广,从1 000到9 9 9 9 ,而TIMESTAMP的范围从1 9 7 0到2 03 8 这让他意识到,如果他的应用程序需要存储很旧或很未来的时间,DATETIME可能是更好的选择。

然后他们讨论了太空入侵的问题。
TIMESTAMP占用4 个字节,而DATETIME在MySQL 5 .6 .4 之前是8 个字节,后来的版本优化为5 个字节。
这意味着如果考虑空间,TIMESTAMP 将更加节省空间。

接下来,他们提到了时区处理。
TIMESTAMP 保存时会自动转换为 UTC 时间,但 DATETIME 不会。
这使他们认为,如果他们的应用程序需要跨时区记录时间,那么 TIMESTAMP 可能更合适。

最后,他们讨论了使用场景。
TIMESTAMP适合计算时区之间的时间差,而DATETIME适合记录信息的修改时间或者需要准确记录历史事件的场景。

朋友听完后说:“嗯,看来我应该根据实际需求来选择,你说的话我需要考虑一下。

我摇摇头说:“是的,在选择数据库字段类型时,确实需要考虑各种因素,你可以理解。

MySQL 支持索引哪些数据类型?

MySQL 索引支持所有数据类型,但请谨慎使用。

整数类型: INT 4 字节,-2 ^3 1 ~2 ^3 1 -1 经常使用主键和外键。
TINYINT 1 字节,-1 2 8 ~1 2 7 状态识别是首选。
SMALLINT 2 字节,-3 2 7 6 8 ~3 2 7 6 7 适用于小范围计数。
BIGINT 8 字节,-2 ^6 3 ~2 ^6 3 -1 适用于非常大的范围。
BIT 位字段,BIT(8 ) 存储 8 位。
二进制小数据存储。

浮点类型: FLOAT 4 字节,单精度。
科学数据的近似计算。
DOUBLE 8 字节,双精度。
高精度计算选项。
REAL 标准双精度,系统差异。
如果准确性敏感,请勿使用。

准确值: DECIMAL(1 0,2 ) 总长度 1 0 位,小数点后 2 位。
存储量。
经济和测量场景的首选。

日期时间类型: 日期 3 个字节,YYYY-MM-DD。
纯日期。
时间 3 个字节,HH:MM:SS。
纯粹的时间。
DATETIME 8 个字节,日期和时间。
万能组合。
TIMESTAMP 4 字节,UTC 时间戳。
自动更新。

人物类型: CHAR(1 0) 固定 1 0 个字符。
国家/地区代码已保存。
固定长度数据是首选。
VARCHAR(2 5 5 ) 最多 2 5 5 个字符。
可变长度。
用户名、地址等很常见。
TEXT(1 00) 索引前 1 00 个字符。
长文本存储。
前缀索引知道 InnoDB 的 7 6 7 字节限制。

二进制类型: BINARY(1 0) 固定 1 0 个字节。
存储哈希值。
首选二进制数据。
VARBINARY(1 0) 可变长度。
灵活存储。
缩略图等适用。
BLOB(1 00) 索引前 1 00 个字节。
长二进制。
前缀类型TEXT的长度也受到限制。

特殊类型: TEXT/BLOB 的前缀索引。
节省空间。
如果手动调整前缀长度,可能会降低查询准确率。
空间数据 R 树索引。
地理信息系统场景。
地理信息查询优化。
全文索引 CHAR/VARCHAR/TEXT。
关键词搜索。
InnoDB表级别全文,MyISAM更灵活。

InnoDB支持所有类型。
TEXT/BLOB 前缀 7 6 7 字节。
MyISAM支持前缀全文,无事务。
内存哈希 B 树。
纯粹的记忆。

自己掂量一下。