grails存储在mysql5.7和mysql8中的日期时间有什么不同?

qv7cva1a  于 2023-01-08  发布在  Mysql
关注(0)|答案(1)|浏览(158)

我会尽量把我面临的问题说得尽可能清楚。
我有一个带有datecreated字段的注册域。
我有一个旧的Grails 2. 2应用程序,使用MySQL 5. 7。该应用程序使用时区US/Mountain运行。
当我用mysql 5.7在grails 2.2中创建一个注册表时,日期存储为美国/山区时间,如下所示。

我已将grails 2.2应用程序升级到grails 4.0.10。新的grails 4.0.10应用程序使用mysql 8。新应用程序运行正常,但它以UTC时区存储日期,即使我在build.gradle文件中将时区传递为

bootRun {
    ignoreExitValue true
    jvmArgs(
        '-Dspring.output.ansi.enabled=always',
            '-Duser.timezone=US/Mountain',
            '-Dgrails.server.port.https=8443',
            '-Dgrails.server.port.http=8080',
//            '-Dorg.apache.catalina.session.StandardSession.ACTIVITY_CHECK=true',

            '-noverify',
        '-XX:TieredStopAtLevel=1',
        '-Xmx1024m')
    sourceResources sourceSets.main
    String springProfilesActive = 'spring.profiles.active'
    systemProperty springProfilesActive, System.getProperty(springProfilesActive)
}

不过读起来像我们/山一样好。
下面是grails 4.0.10以utc时区存储的日期时间。

现在我面临的问题是。我们有生产数据存储在MySQL 5. 7中,其中日期存储在US/Mountain中。
我正在把数据传输到mysql 8中,以用于新的应用程序。我从mysql5.7下载了数据作为.sql文件。然后我把.sql文件导入到在我的本地系统中运行的mysql 8中。导入工作正常。当我运行新的grails4.0.10应用程序时,我可以看到日期时间都偏离了7个小时。这是意料之中的,因为grails4.0。10期望数据库中的日期为UTC格式,但mysql 5.7数据为US/Mountain格式。
我知道解决这个问题的唯一方法是手动将mysql 5.7中的所有日期转换为UTC,然后将文件导入到mysql 8中,这样grails 4.0.10就可以正常工作了,因为它需要UTC格式的日期时间。
我很感激任何对我几天来所面临的困境的见解。
先谢谢你了!

vltsax25

vltsax251#

应用程序中的这一行.yml做到了。

hibernate:
    jdbc:
        time_zone: US/Mountain

由于我正在将以US/Mountain格式存储日期时间的mysql 5.7数据导入mysql 8,因此我需要告诉grails 4将日期时间解释为US/Mountain,而不是默认的UTC。
感谢grails slack社区的olavgg。grails.slack.com对我的帮助。

相关问题