问题MariaDB时区和应用程序时区

问题描述 投票:0回答:1

我想问你有关 MariaDB 时区的问题。

  • 应用:Asia/Seoul,将 ?serverTimezone= UTC 添加到 jdbcurl。
  • MariaDB(docker):@@global.time_zone,@@session.time_zone,@@system_time_zone设置UTC/ docker设置UTC
  1. 我期望的是,如果你在应用程序中将其设置为KST时间,它将在DB中保存为UTC时间,但它会保存为KST时间。这是正常流程吗? (例如 KST 2024-11-18 14:00:00 插入,我预计 UTC 2024-11-18 05:00:00,但 db 插入 2024-11-18 14:00:00)
  2. 我想将数据库配置为UTC时间,并将应用程序配置为我设置的亚洲/首尔,有办法吗?

 - application
    

    @PostConstruct
        void started() {
            TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul"));
        }
    
        @PostMapping
        public void insertTime() {
            LocalDateTime now = LocalDateTime.now();
            log.info(now.toString());
    
            TImeTest timeTest = TImeTest.builder()
                    .createdAt(now)
                    .modifiedAt(now)
                    .build();
    
            timeTestRepository.save(timeTest);
        }

    url: jdbc:mariadb://localhost:3307/test?serverTimezone=UTC

 - DB

 [

  {
    "@@global.time_zone": "UTC",
    "@@session.time_zone": "UTC",
    "@@system_time_zone": "UTC"
  }
]

java spring mariadb
1个回答
0
投票

我认为你应该将 serverTimeZone 更改为

Asia/Seoul

因为 LocalDateTime 不包含区域信息,所以当传入 MySQL 查询时,它只会被转换为未分区的日期时间字符串。

MySQL 将使用 serverTimeZone 和 db 时区之间的差异作为传入日期时间的增量值。 因此,如果您将 serverTimeZone 设置为

Asis/Seoul
将导致您的时间节省 -9 小时。

或者仅使用 ZonedDateTime 是另一种选择。

© www.soinside.com 2019 - 2024. All rights reserved.