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

Bagaimana cara mengubah zona waktu MySQL dalam koneksi database menggunakan Java?

useTimezone adalah solusi yang lebih lama. Tim MySQL menulis ulang kode setTimestamp/getTimestamp baru-baru ini, tetapi itu hanya akan diaktifkan jika Anda mengatur parameter koneksi useLegacyDatetimeCode=false dan Anda menggunakan versi terbaru konektor JDBC mysql. Jadi misalnya:

String url =
 "jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false

Jika Anda mengunduh kode sumber konektor mysql dan melihat setTimestamp, sangat mudah untuk melihat apa yang terjadi:

Jika menggunakan kode waktu tanggal lawas =false, newSetTimestampInternal(...) dipanggil. Kemudian, jika Kalender yang diteruskan ke newSetTimestampInternal adalah NULL, objek tanggal Anda diformat dalam zona waktu database:

this.tsdf = new SimpleDateFormat("''yyyy-MM-dd HH:mm:ss", Locale.US);
this.tsdf.setTimeZone(this.connection.getServerTimezoneTZ());
timestampString = this.tsdf.format(x);

Sangat penting bahwa Kalender adalah nol - jadi pastikan Anda menggunakan:

setTimestamp(int,Timestamp).

... BUKAN setTimestamp(int,Timestamp,Calendar).

Seharusnya sudah jelas sekarang bagaimana ini bekerja. Jika Anda membuat tanggal:5 Januari 2011 03:00 di Amerika/Los_Angeles (atau zona waktu apa pun yang Anda inginkan) menggunakan java.util.Calendar dan panggil setTimestamp(1, myDate), maka itu akan mengambil tanggal Anda, gunakan SimpleDateFormat untuk memformatnya di zona waktu basis data . Jadi jika DB Anda berada di America/New_York, itu akan membuat String '2011-01-05 6:00:00' untuk dimasukkan (karena NY lebih dulu dari LA 3 jam).

Untuk mengambil tanggal, gunakan getTimestamp(int) (tanpa Kalender). Sekali lagi itu akan menggunakan zona waktu basis data untuk membuat tanggal.

Catatan:Zona waktu server web sama sekali tidak relevan sekarang! Jika Anda tidak menyetel useLegacyDatetimecode ke false, zona waktu server web digunakan untuk memformat - menambah banyak kebingungan.

Catatan:

Mungkin MySQL saya mengeluh bahwa zona waktu server ambigu. Misalnya, jika database Anda diatur untuk menggunakan EST, mungkin ada beberapa zona waktu EST di Java, jadi Anda dapat mengklarifikasi ini untuk konektor mysql dengan memberi tahu persis apa zona waktu database:

String url =
 "jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false&serverTimezone=America/New_York";

Anda hanya perlu melakukan ini jika ada keluhan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySql Count tidak dapat menampilkan 0 nilai

  2. Mengamankan Instalasi MySQL Anda

  3. Transmisikan ke varchar

  4. Bagaimana cara memberi setiap pengguna terdaftar url mereka sendiri menggunakan PHP?

  5. Menggunakan aplikasi klien MySQL