【问题标题】:MySql Server 5.7 not saving milliseconds on DATETIME(3) columnMySql Server 5.7 没有在 DATETIME(3) 列上节省毫秒
【发布时间】:2020-02-04 20:28:06
【问题描述】:

我在 Armbian Bionic (Ubuntu 18.04.4) 上运行 MySQL 服务器,在 Orange Pi Zero 上运行。 MySQL服务器版本为5.7.29。

我创建了一个表,数据类型为DATETIME(3),也就是说,我想存储一个毫秒精度的日期和时间。

当我执行INSERT INTO table1 (column1) VALUES ('2020-02-04 12:34:46.789'); 然后我执行SELECT column1 FROM table1; 它显示:

2020-02-04 12:34:47

所以看起来它没有节省毫秒?但是如果我执行SELECT NOW(3); 它会显示:

2020-02-04 20:25:33.077

所以它处理毫秒。有什么想法吗?

【问题讨论】:

  • 如果选择使用 MS 会怎样? -- IE SELECT MICROSECOND(column1) FROM table1 ; ??
  • 也许这个链接可以帮助你stackoverflow.com/questions/18176088/…
  • 抱歉 Zak 回复晚了。如果我选择 MICROSECOND(column1) 它返回 0。所以我猜它根本没有节省毫秒......

标签: mysql mysql-5.7


【解决方案1】:

您的专栏似乎正在使用默认的DATETIME。您可以使用以下查询查看当前表架构:

DESC table_name

确保您使用DATETIME(3) 创建了表:

CREATE TABLE table_name (
  column_name DATETIME(3)
)

您可以确保输出使用精度。但是如果值存储在 DATETIME(3) 列上,您只能获得毫秒数:

SELECT CAST(column_name AS DATETIME(3)) FROM table_name

demo on dbfiddle.uk

【讨论】:

  • 感谢塞巴斯蒂安,很抱歉回复晚了。如果我 DESC table1,它确实是 DATETIME(3)。如果我 SELECT CAST(column1 AS DATETIME(3)) FROM table1 我可以看到毫秒,但它们都为零。另外,如果我按照 Zak 的建议 SELECT MICROSECOND(column1) FROM table1,它也为零。因此,毫秒绝对不会首先被保存。这不是显示问题。插入表格时,日期时间将四舍五入到最接近的秒数。
【解决方案2】:

我无法解释这一点。即使我将列创建为 DATETIME(3),即使在执行 DESC table1 并得到回复 DATETIME(3) 之后,出于绝望,我还是尝试使用除了 MySql Workbench 之外的另一个数据库客户端。我下载了DBeaver,并编辑了表格。我看到 column1 设置为 DATETIME(即使 Workbench 将其显示为 DATETIME(3))。所以我做了 DATETIME(3) 现在它可以工作了!所以它一定是 Workbench 中的一个错误,在创建或编辑 DATETIME 列时,它忽略了小数秒说明符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2012-09-13
    • 2015-01-10
    • 2011-02-21
    • 1970-01-01
    • 2015-09-16
    • 2014-08-07
    相关资源
    最近更新 更多