MySQL中DATETIME(6)里的数字6代表什么含义?
Hibernate自动将DATETIME转为DATETIME(6)的原因及解决办法
- 这是Hibernate自身的默认映射规则,和MySQL原生行为无关:Hibernate针对MySQL的方言(如
MySQL8Dialect),默认会把Java中的日期时间类型(例如LocalDateTime、Date)映射为MySQL的DATETIME(6)类型,即保留6位微秒精度的日期时间。 - 若要保持不带精度的
DATETIME,可以通过以下方式调整:- 字段级强制指定:在实体类的对应日期字段上添加
@Column(columnDefinition = "DATETIME")注解,直接指定数据库字段类型,覆盖Hibernate的默认映射。 - 全局方言自定义:继承现有MySQL方言类,重写日期时间类型的注册逻辑,修改默认精度配置。示例代码如下:
之后在Hibernate配置文件中指定使用该自定义方言:public class CustomMySQL8Dialect extends MySQL8Dialect { public CustomMySQL8Dialect() { super(); registerColumnType(TIMESTAMP, "DATETIME"); registerColumnType(DATE, "DATE"); registerColumnType(TIME, "TIME"); } }hibernate.dialect=你的包路径.CustomMySQL8Dialect
- 字段级强制指定:在实体类的对应日期字段上添加
内容的提问来源于stack exchange,提问作者Archimedes Trajano
相关产品推荐
相关产品推荐

