0
点赞
收藏
分享

微信扫一扫

1. 数据库字段类型是 YEAR (如 2023) 2. Java 实体类中使用 String 类型接收 3. 直接查询时返回的是类似 “2023-01-01“ 的格式


问题背景

  1. 数据库字段类型是 YEAR (如 2023)
  2. Java 实体类中使用 String 类型接收
  3. 直接查询时返回的是类似 “2023-01-01” 的格式

CAST(establish_year AS CHAR) 的作用

当你使用 CAST(establish_year AS CHAR) 时,MySQL 会将 YEAR 类型显式转换为字符串类型,这会:

  1. 去除日期部分:直接将 YEAR 值转换为纯数字字符串(如 “2023”)
  2. 避免自动转换:防止 MySQL 默认将 YEAR 类型转换为完整日期格式
  3. 匹配实体类:转换后的纯数字字符串能更好地与实体类的 String 类型对应

为什么直接查询会返回 “xxxx-01-01”

MySQL 的 YEAR 类型在以下情况会自动转换为完整日期:

  • 当 JDBC 驱动获取 YEAR 类型时,可能会将其视为 DATE 类型
  • 默认补全为当年第一天的日期(xxxx-01-01)

其他解决方案

除了 CAST 外,还有其他方法可以解决:

  1. 使用 DATE_FORMAT(establish_year, '%Y') 明确格式化
  2. 在实体类中使用 Integer 类型而非 String 来接收 YEAR 值
  3. 使用 MyBatis 等 ORM 框架的类型处理器进行自定义转换
  4. 修改数据库,使用varchar
  5. 修改实体类使用 year


举报

相关推荐

0 条评论