为什么MySQL不支持毫秒/微秒精度?

2022-08-30 11:51:36

所以我在MySQL中发现了有史以来最令人沮丧的错误

显然,字段和支持功能不支持任何比秒更高的精度!?TIMESTAMP

所以我使用的是PHP和Therism,我真的需要这些微秒(我正在使用属性)。actAs: [Timestampable]

我发现一个我可以使用字段来存储值。但是,教义会增加毫秒吗?我认为它只是将NOW()分配给字段。我还担心散布在代码中的日期操作函数(在SQL中)会中断。BIGINT

我还看到了一些关于编译UDF扩展的内容。这是不可接受的,因为我或未来的维护者将升级和噗噗,更改消失了。

有没有人找到合适的解决方法?


答案 1

有关下一个读者的信息,此错误最终已在版本 5.6.4 中得到纠正:

“MySQL现在支持TIME,DATETIME和TIMESTAMP值的小数秒,精度高达微秒。


答案 2

从 SQL92 标准:

  • 时间戳 - 包含日期时间字段的年、月、日、小时、分钟和秒。

从我的角度来看,符合SQL92标准的数据库不需要支持毫微秒或微秒。因此,Bug #8523 被正确标记为“功能请求”。

Doctrine将如何处理微秒等?我刚刚发现以下内容:Doctrine#Timestamp

时间戳数据类型仅仅是日期和时间数据类型的组合。时间戳类型值的表示是通过将日期和时间字符串值联接到由空格联接的单个字符串中来实现的。因此,格式模板是 YYYY-MM-DD HH:MI:SS。

因此,在SQL92文档中也没有提到微秒。但我不打算深入教义,但它似乎是一个ORM,例如Java中的冬眠。因此,可以/应该可以定义自己的模型,您可以在其中将时间信息存储在BIGINT或STRING中,并且您的模型负责将其相应地读/写到PHP类中。

顺便说一句:我不希望MySQL在不久的将来以毫/微秒的速度支持TIMESTAMP,例如未来5年。


推荐