sql >> Databasteknik >  >> RDS >> Mysql

Missmatch mellan DATETIME-värden i H2- och MySQL-databaser infogade från Java/Kotlin

Så det ser ut som att korrigeringen var att ställa in UTC-tidszon för JDBC-anslutningen (istället för JVM):

spring.jpa.properties.hibernate.jdbc.time_zone=UTC

och det är beroende av att använda Instant för att behålla värdet på Java-sidan och med created_at fält med DATETIME-typ i MySQL och H2.

Den förkortade resulterande kotlin-koden är:

@Entity
data class SomeEntity(
    val createdAt: Instant = Instant.now() // default created date is current UTC time
)

val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd H:mm:ss")

createdAt = LocalDateTime.parse("2012-11-30 16:13:21", dateTimeFormatter).toInstant(ZoneOffset.UTC)

Idéer hämtade från kommentarer från "Joop Eggen", detta och detta artikel.

Bonus

Jag antar att om du läser det här kanske du också behöver hjälp med att felsöka SQL-frågor.

1. För att skriva ut SQL-frågor som körs på H2 lägg till TRACE_LEVEL_FILE=2 och TRACE_LEVEL_SYSTEM_OUT=2 till anslutningssträng (se här ):

spring.datasource.url=jdbc:h2:mem:dbname;TRACE_LEVEL_FILE=2;TRACE_LEVEL_SYSTEM_OUT=2;

2. Så här aktiverar du vilolägesloggar:

spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.use_sql_comments=true
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.type=TRACE

3. För att aktivera frågeloggar i MySQL (en av metoderna, använd inte på produktionsdb!):

SET GLOBAL general_log = 'ON';
SET global log_output = 'table';
select * from mysql.general_log ORDER BY event_time DESC;



  1. CodeIgniter aktiva poster problem med att anropa flera lagrade procedurer

  2. MySQL Match Fulltext

  3. Konvertera den nya raden till XML i en Oracle Trigger

  4. MySQL Match-problem