【问题标题】:Date not saved correctly to MySQL日期未正确保存到 MySQL
【发布时间】:2025-12-27 06:00:07
【问题描述】:

MySQL 没有正确保存日期。我正在尝试在数据库中添加 createdAt 列。

我已经尝试过使用 MySQL NOW() 函数,但它似乎不起作用。

// 使用 sql 查询执行伪代码

stmt, _:= d.db.Prepare("INSERT INTO posts(title, body, EmailHref, SlackHref, DiscordHref, InstHref, Time) VALUES(?, ?, ?, ?, ?, ?, NOW());")
res, err := stmt.Exec(newPost.Title, newPost.Body, newPost.EmailHref, newPost.SlackHref, newPost.DiscordHref, newPost.InstHref)

MYSQL 中 createdAt 列的类型是 DATE。

这是我在获取新创建的帖子时得到的:

"time": "2019-04-24T00:00:00Z"

我希望得到最多几分钟的实际时间。

【问题讨论】:

  • 好的,谢谢大家,您的回答解决了我的问题。

标签: mysql go time


【解决方案1】:

如果你也想存储时间,你必须使用DATETIME而不是DATE

您可以对createdAt 列的change the column type 使用以下查询:

ALTER TABLE posts MODIFY createdAt DATETIME

DATE 数据类型无法存储时间部分,因此您必须使用DATETIME

SELECT CAST(NOW() AS DATE);     -- 2019-04-24
SELECT CAST(NOW() AS DATETIME); -- 2019-04-24 09:47:57

【讨论】:

    【解决方案2】:

    我认为您只需在 mySQL 中将类型从 DATE 更改为 DATETIME

    alter table <tableName> modify <columnName> DATETIME;
    

    【讨论】:

    • @E.Belekov DATE 用于存储日期,DATETIME 用于存储日期时间(带时间的日期),TIMESTAMPS 也存储带时间的日期,速度也更快,但使用日期时间更容易(时区,sql本机函数,...)
    • DATE 只会向您显示没有任何时间的日期。如果要添加时间,则需要将类型更改为 DATETIME 或 TIMESTAMP
    • 再好不过了@PavelTřupek
    • 我应该接受谁的答案?你和塞巴斯蒂安·布罗施同时回答。
    • 您可以订购最旧的并选择最旧的答案,选择权在您手中 :-)