mysql类型简记

56 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天

在数据库中,类型的选择是一个很大的问题。一种类型许多有奇奇怪怪的变种。 例如所谓的时间戳,用来表示时间的,怎么你在不同的地方看到的可能不太一样呢?好像有的长有的短,还有的居然有小数点。 这里的原因主要在于时间戳在定义上就有许多不同的类型,简单来说就有秒,毫秒,微秒,纳秒。这之间差了整整9个数量级。

实际上时间戳TIMESTAMP不但可以只是TIMESTAMP,也可以在它的后面加上括号,括号里面可以指定精度,比如TIMESTAMP(3)表示精确到毫秒,TIMESTAMP(6)表示精确到微秒,TIMESTAMP(9)表示精确到纳秒。

另外一种常用的时间类型的DATETIME也有这样的功能,在括号里加上数字,用来指定精度。有一点值得注意的是,它们这些表示时间的类型在设定初始值时需要注意,同样也需要为它们指定精度,否则对于有些版本的MySQL来说,可能会报错。 例如设定微秒的时间戳的初始值时,需要这样写:

CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; 

与时间类型不同,MySQL还有其他类型的可以添加数字的类型,比如INT,BIGINT,例如INT(11) 你可能会误认为这是说一种特别的INT类型,比如限制只能使用11个比特位之类的。但其实他只是一个显示位数(查询数据的时候显示的位数)的限制。不过经常使用的varchar和char之类的字符类型倒是确确实实定义了长度限制。另外大家在MySQL里基本不怎么使用的Float和Double也是确实可以指定精度的。

总的来说,在选择MySQL类型时需要考虑到数据的类型、长度、精度等因素,并且需要注意不同版本MySQL之间的可能差异,最好是关注使用版本的相关文档。