Apabila cuba memasukkan data ke dalam jadual tanpa menyatakan nilai secara eksplisit untuk lajur tidak boleh dibatalkan yang kekurangan nilai lalai, MySQL mungkin membuang ralat yang menyatakan "Field doesn't have a default value" (Ralat No. 1364).
Seorang pengguna telah menghadapi ralat ini apabila memasukkan ke dalam jadual dengan skema berikut:
CREATE TABLE try ( name VARCHAR(8), CREATED_BY VARCHAR(40) NOT NULL );
Pencetus telah dicipta untuk mengisi secara automatik CREATED_BY medan dengan nama pengguna:
CREATE TRIGGER autoPopulateAtInsert BEFORE INSERT ON try FOR EACH ROW SET NEW.CREATED_BY = USER();
Walau bagaimanapun, cuba memasukkan baris menggunakan pertanyaan berikut:
INSERT INTO try (name) VALUES ('abc');
masih menghasilkan mesej ralat.
Mesej ralat adalah hasil daripada mod SQL STRICT_TRANS_TABLES yang ditetapkan dalam Fail konfigurasi MySQL (my.ini atau serupa). Mod ini menguatkuasakan peraturan ketat mengenai nilai lalai untuk lajur yang tidak boleh dibatalkan. Untuk menyelesaikan isu tersebut, pengguna hendaklah:
Sebagai alternatif, pengguna boleh mencipta nilai lalai untuk Medan CREATED_BY menggunakan pernyataan ALTER TABLE. Walau bagaimanapun, pendekatan ini mungkin tidak sesuai jika pencetus bertujuan untuk menetapkan nilai secara dinamik.
Atas ialah kandungan terperinci Mengapa MySQL Throw Ralat 1364: 'Bidang Tidak Mempunyai Nilai Lalai'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!