sql >> Database >  >> RDS >> Mysql

Mismatch tussen DATETIME-waarden in H2- en MySQL-databases ingevoegd vanuit Java/Kotlin

Het lijkt er dus op dat de oplossing was om de UTC-tijdzone in te stellen voor de JDBC-verbinding (in plaats van JVM):

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

en het is afhankelijk van het gebruik van Instant om de waarde aan Java-kant te houden en met created_at veld met DATETIME-type in MySQL en H2.

De verkorte resulterende kotlin-code is:

@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)

Ideeën ontleend aan opmerkingen van "Joop Eggen", dit en dit artikel.

Bonus

Ik denk dat als je dit leest, je misschien ook hulp nodig hebt bij het debuggen van SQL-query's.

1. Om SQL-query's af te drukken die op H2 worden uitgevoerd, voegt u TRACE_LEVEL_FILE=2 toe toe en TRACE_LEVEL_SYSTEM_OUT=2 naar verbindingsreeks (zie hier ):

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

2. Logboeken voor slaapstand inschakelen:

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. Om query-logboeken in MySQL in te schakelen (een van de benaderingen, niet gebruiken voor productie-db!):

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



  1. AES-codering in mysql en php

  2. mySQL-subquerylimiet

  3. MySQL - CONCAT - Is er een manier om een ​​string samen te voegen en als variabele te gebruiken?

  4. Kan ik de GROUP BY besturen in de orm van django 1.3?