Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Ketidakcocokan antara nilai DATETIME dalam database H2 dan MySQL yang disisipkan dari Java/Kotlin

Jadi sepertinya perbaikannya adalah mengatur zona waktu UTC untuk koneksi JDBC (bukan JVM):

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

dan itu bergantung pada penggunaan Instant untuk menjaga nilai di sisi Java dan dengan created_at bidang memiliki tipe DATETIME di MySQL dan H2.

Hasil singkatan kode kotlin adalah:

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

Ide diambil dari komentar "Joop Eggen", ini dan ini artikel.

Bonus

Saya rasa jika Anda membaca ini, Anda mungkin juga memerlukan bantuan dengan men-debug kueri SQL.

1. Untuk mencetak kueri SQL yang berjalan pada H2 tambahkan TRACE_LEVEL_FILE=2 dan TRACE_LEVEL_SYSTEM_OUT=2 ke string koneksi (lihat di sini ):

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

2. Untuk mengaktifkan log hibernasi:

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. Untuk mengaktifkan log kueri di MySQL (salah satu pendekatan, jangan gunakan pada db produksi!):

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. PDO mengambil satu kolom dari tabel ke dalam array 1 dimensi

  2. Skrip PHP untuk mengisi tabel MySQL

  3. kecepatan couchdb vs mysql

  4. MySQL REPLACE INTO pada banyak kunci?

  5. Output antara dua tanggal mysql