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

Bidang Jooq LocalDateTime menggunakan zona waktu sistem alih-alih zona waktu sesi

Saya baru-baru ini menemukan bahwa tergantung pada driver database yang digunakan, jOOQ dapat menunjukkan beberapa perilaku aneh dalam penguraian DateTime. jOOQ mengembalikan waktu tanggal offset sebagai Z (UTC) meskipun tidak

Secara khusus, dalam kasus saya, menggunakan driver Postgres yang berbeda mengakibatkan DefaultBinding.java menerima objek kalender yang memiliki stempel waktu, tetapi memanggil toString untuk menguraikannya. Ternyata, toString tidak mencetak zona waktu, lalu jOOQ menyimpulkan bahwa itu dalam waktu lokal.

Bagi saya, baris yang menyinggung di DefaultBinding.java (saya menggunakan stempel waktu dengan zona waktu) adalah:

else if (type == OffsetDateTime.class) {
    result = (T) offsetDateTime(ctx.resultSet().getString(ctx.index()));
}

Anda mungkin berada di baris yang berbeda dalam rangkaian ifs lain tersebut berdasarkan tidak memiliki zona waktu.

Dalam pengujian saya, saya juga menemukan bahwa mengubah waktu sistem mengubah hasil, tetapi mengubah waktu sesi tidak menghasilkan apa-apa.

Untungnya bagi saya, beralih ke driver Postgres standar menyelesaikan masalah. Jika tidak, saya akan melihat kelebihan pengikatan untuk OffsetDateTime untuk memperbaiki penggunaan toString dan itu terkait pengupasan zona waktu yang relevan. Sayangnya, Anda mungkin perlu mengikuti jalur itu, kecuali jika Anda juga menggunakan driver SQL yang dapat ditingkatkan atau diganti. Atau, Anda bisa menyimpannya dengan zona waktu dan kemudian mengonversinya ke zona waktu yang diinginkan saat Anda memuat dari database.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pilih nilai acak berdasarkan peluang probabilitas

  2. SQL pilih hanya baris dengan nilai maksimal pada kolom

  3. Pemformatan baris perintah MySQL dengan UTF8

  4. Kueri Database MySQL dan Kelompokkan Berdasarkan Rentang Tanggal untuk Membuat Bagan

  5. kesalahan mysql:melebihi koneksi maks per jam