Mysql datetime类型与Go结构体时间字段设计

430 阅读2分钟
  1. MySQL 的DATETIME类型基本特性

    • 在 MySQL 中,DATETIME类型用于存储日期和时间,格式为YYYY - MM - DD HH:MM:SS。它的存储范围是从1000 - 01 - 01 00:00:009999 - 12 - 31 23:59:59。从这个基本定义可以看出,标准的DATETIME类型是不直接支持毫秒的。
  2. DATETIME类型的扩展精度支持(MySQL 5.6.4 及以上)

    • 从 MySQL 5.6.4 版本开始,DATETIME类型可以支持更高的精度,包括毫秒。通过在创建表或者修改表结构时指定精度,可以让DATETIME类型存储包含毫秒的值。

    • 例如,在创建表时可以这样指定:

CREATE TABLE test_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    datetime_column DATETIME(3)
);

在这个示例中,DATETIME(3)表示DATETIME类型的精度为 3,也就是可以存储毫秒部分(精度可以指定为 0 - 6,其中 0 表示没有小数部分,也就是传统的DATETIME格式,1 - 6 表示可以存储 1 - 6 位小数部分,用于存储毫秒、微秒等更精确的时间)。

  • 当插入数据时,可以插入包含毫秒的值,例如:

INSERT INTO test_table (datetime_column) VALUES ('2024 - 01 - 01 12:00:00.123');

这条 SQL 语句插入了一个包含毫秒部分(123毫秒)的日期时间值。

  1. 在程序中的处理(以 Go 语言和 GORM 为例)

    • 当使用 Go 语言和 GORM 与 MySQL 进行交互,并且数据库中的DATETIME字段支持毫秒精度时,在定义 Go 结构体对应的字段类型可以使用time.Time

    • 例如:

type TestTable struct {
    ID            int
    DatetimeColumn time.Time
}

在这个结构体定义中,DatetimeColumn字段类型为time.Time,它可以正确地处理从 MySQL 数据库中读取出来的包含毫秒精度的日期时间值。在插入数据时,time.Time类型的变量也可以包含毫秒精度,GORM 会自动将其转换为符合数据库要求的格式进行插入。