【发布时间】:2020-08-07 13:36:50
【问题描述】:
我希望能够通过created_at 时间戳(在本例中为:2020-08-07 11:30:28.5934908)找到User 记录。
但是结果是这样的:
User.where(created_at: '2020-08-07 11:30:28.5934908').first
=> nil
在 Rails 生成的 MySQL 查询中,找不到此(现有)用户记录的原因似乎很明显:
User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`created_at` = '2020-08-07 11:30:28.593490' ORDER BY `users`.`id` ASC LIMIT 1
...由于某种原因,最后一个数字 8 从 MySQL 查询中使用的时间戳 2020-08-07 11:30:28.5934908 中删除。
这里有什么问题? Rails 会缩短查询中的时间戳吗?或者 MySQL 会这样做吗?我该如何解决?
【问题讨论】:
-
MySQL 仅支持带有 microsecond precision(小数点后 6 位)的时间戳,但您的查询指定了 7 位(精度为数百纳秒)。您确定查询中的时间戳正确吗? MySQL中
created_at列的定义是什么? -
@BoraMa - 你是对的,MySQL 表显示了
datetime(6)定义。我的查询中使用的第 7 位数字来自像User.first.created_at.to_f这样的转换。如果不是.created_at.to_f,将datetime转换为精确的float(秒数)的正确方法是什么?
标签: mysql ruby-on-rails