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

Kesalahan di MySQL saat mengatur nilai default untuk DATE atau DATETIME

Kesalahan ini karena mode sql yang bisa menjadi mode ketat sesuai dokumentasi MYSQL 5.7 terbaru

Kata Dokumentasi MySQL 5.7 :

Mode ketat memengaruhi apakah server mengizinkan '0000-00-00' sebagai tanggal yang valid:Jika mode ketat tidak diaktifkan, '0000-00-00' diizinkan dan sisipan tidak menghasilkan peringatan. Jika mode ketat diaktifkan, '0000- 00-00' tidak diizinkan dan sisipan menghasilkan kesalahan, kecuali IGNORE juga diberikan. Untuk INSERT IGNORE dan UPDATE IGNORE, '0000-00-00' diizinkan dan sisipan menghasilkan peringatan.

Untuk Memeriksa mode MYSQL

SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session

Menonaktifkan mode STRICT_TRANS_TABLES

Namun untuk mengizinkan format 0000-00-00 00:00:00 Anda harus menonaktifkan mode STRICT_TRANS_TABLES di file konfigurasi mysql atau dengan perintah

Dengan perintah

SET sql_mode = '';

atau

SET GLOBAL sql_mode = '';

Menggunakan kata kunci GLOBAL membutuhkan hak istimewa super dan ini memengaruhi operasi yang terhubung dengan semua klien sejak saat itu

jika di atas tidak berfungsi, buka /etc/mysql/my.cnf (sesuai ubuntu) dan beri komentar STRICT_TRANS_TABLES

Juga, jika Anda ingin menyetel mode sql secara permanen saat startup server, maka sertakan SET sql_mode='' di my.cnf di Linux atau MacOS. Untuk windows ini harus dilakukan di my.ini berkas.

Catatan

Namun mode ketat tidak diaktifkan secara default di MYSQL 5.6. Oleh karena itu tidak menghasilkan kesalahan sesuai Dokumentasi MYSQL 6 yang mengatakan

MySQL mengizinkan Anda untuk menyimpan nilai "nol" dari '0000-00-00' sebagai "tanggal dummy." Ini dalam beberapa kasus lebih nyaman daripada menggunakan nilai NULL, dan menggunakan lebih sedikit data dan ruang indeks. Untuk melarang '0000-00-00', aktifkan mode SQL NO_ZERO_DATE.

PERBARUI

Mengenai masalah bug seperti yang dikatakan oleh @Dylan-Su:

Saya tidak berpikir ini adalah bug karena cara MYSQL berkembang dari waktu ke waktu karena beberapa hal diubah berdasarkan peningkatan lebih lanjut dari produk.

Namun saya memiliki laporan bug terkait lainnya mengenai NOW() fungsi

Bidang tanggal tidak menerima default SEKARANG()

Catatan Berguna Lainnya [lihat Inisialisasi dan Pembaruan Otomatis untuk TIMESTAMP dan DATETIME ]

Pada MySQL 5.6.5, kolom TIMESTAMP dan DATETIME dapat secara otomatis diinisialisasi dan diperbarui ke tanggal dan waktu saat ini (yaitu, stempel waktu saat ini). Sebelum 5.6.5, ini berlaku hanya untuk TIMESTAMP, dan untuk paling banyak satu kolom TIMESTAMP per tabel. Catatan berikut pertama-tama menjelaskan inisialisasi dan pembaruan otomatis untuk MySQL 5.6.5 dan yang lebih baru, kemudian perbedaan untuk versi sebelumnya 5.6.5.

Pembaruan Mengenai NO_ZERO_DATE

Pada MySQL pada 5.7.4, mode ini tidak digunakan lagi. Untuk versi sebelumnya Anda harus mengomentari baris masing-masing di file konfigurasi. Lihat dokumentasi MySQL 5.7 pada NO_ZERO_DATE



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Baris mana yang dikembalikan saat menggunakan LIMIT dengan OFFSET di MySQL?

  2. Campuran ilegal dari collation Kesalahan MySQL

  3. Cegah kenaikan otomatis InnoDB PADA KUNCI DUPLICATE

  4. mysqli atau PDO - apa kelebihan dan kekurangannya?

  5. FROM_DAYS() Contoh – MySQL