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

Laravel SQLSTATE[22007]:Format tanggal waktu tidak valid:1292 Nilai tanggal waktu salah:'2019-03-10 02:00:39' untuk kolom 'updated_at' (penghematan siang hari?)

Saya menemukan bahwa masalahnya adalah karena time_zone server MySQL saya pengaturan disetel ke SYSTEM (dan sistem saya adalah US Central). Laravel menyediakan stempel waktu yang sudah dikonversi ke UTC, tetapi database saya menafsirkannya sebagai Pusat AS karena time_zone pengaturan. Waktu sebenarnya sedang diubah lagi secara internal oleh MySQL ke representasi cap waktu unix "nyata" UTC (yang akan salah karena diimbangi oleh zona waktu), meskipun mereka tampaknya sudah menjadi UTC di setiap kueri karena mereka juga dikonversi kembali ke Pusat AS lagi untuk membaca ( Saya tahu benar).

Karena itu, pada 20:00:39 (8:00 PM) waktu setempat, stempel waktu UTC Laravel saya adalah 02:00:39. MySQL menginterpretasikan waktu ini sebagai waktu Tengah AS, dan karena waktunya antara 02:00 dan 03:00 (yaitu saat jam melompat maju untuk Pusat AS), waktunya tidak valid.

Solusi terbaik untuk aplikasi Laravel adalah memaksa setiap koneksi database menggunakan +00:00 zona waktu (atau apa pun yang Anda tetapkan sebagai zona waktu aplikasi di config/app.php ) sehingga tidak akan terjadi konversi sekunder. Ini dapat dilakukan di config/database.php :

'mysql' => [
    // ...

    'timezone'  => '+00:00'
],

Dengan cara ini Anda tidak bergantung pada server database Anda jika memiliki zona waktu yang dikonfigurasi yang berbeda dari aplikasi Laravel Anda. Opsi lainnya adalah mengubah time_zone database pengaturan, tetapi Anda masih berisiko bug berulang jika Anda pernah mengubah host atau perlu membangun kembali server karena alasan apa pun (dan tidak mengonfigurasi zona waktu dengan benar lagi), atau memengaruhi database lain di server.

Catatan penting:Karena semua stempel waktu sebelumnya diimbangi secara internal oleh MySQL dari zona waktu yang dikonfigurasi ke stempel waktu unix UTC (yang, sekali lagi, salah karena catatan sudah UTC), mungkin perlu menjalankan migrasi data untuk memperbaiki stempel waktu lama. Saya belum menyelidiki lebih lanjut karena untuk aplikasi saya tidak masalah jika stempel waktu lama salah beberapa jam.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memasukkan item ke dalam bootstrap-dropdown dari SQL Table

  2. Bagaimana cara memasukkan bingkai data panda melalui mysqldb ke dalam database?

  3. Bagaimana cara menarik semua id produk, skus, nama produk, deskripsi di magento hanya menggunakan mysql?

  4. Apa cara tercepat untuk memuat file XML ke MySQL menggunakan C#?

  5. indeks primer Vs indeks sekunder:perbedaan kinerja