Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Niezgodność między wartościami DATETIME w bazach danych H2 i MySQL wstawionych z Javy/Kotlin

Wygląda więc na to, że poprawka polegała na ustawieniu strefy czasowej UTC dla połączenia JDBC (zamiast JVM):

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

i opiera się na użyciu Instant za utrzymanie wartości po stronie Java i created_at pole z typem DATETIME w MySQL i H2.

Skrócony wynikowy kod kotlin to:

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

Pomysły zaczerpnięte z komentarzy „Joop Eggen”, ten i to artykuł.

Bonus

Myślę, że jeśli to czytasz, możesz potrzebować pomocy przy debugowaniu zapytań SQL.

1. Aby wydrukować zapytania SQL działające na H2 dodaj TRACE_LEVEL_FILE=2 i TRACE_LEVEL_SYSTEM_OUT=2 do ciągu połączenia (zobacz tutaj ):

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

2. Aby włączyć dzienniki hibernacji:

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. Aby włączyć dzienniki zapytań w MySQL (jedno z podejść, nie używaj na produkcyjnej bazie danych!):

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Indeks MySQL dla MIN i MAX

  2. MySQL:Jak mogę uzyskać znacznik czasu ostatniego wstawienia do bazy danych?

  3. Ostrzeżenie PHP:mysqli::query():Nie można pobrać mysqli

  4. Jak ZAMÓWIĆ WEDŁUG PRZYPADKU w Doctrine2 (Symfony2)

  5. Jak uzyskać podobną wartość w Oracle