Isu Nilai Tarikh Lalai dengan CURRENT_DATE/CURDATE()
Dalam dunia MySQL, anda mungkin menghadapi soalan yang kelihatan mudah: mengapa' t CURRENT_DATE atau CURDATE() berfungsi sebagai nilai lalai untuk DATE lajur?
Teka-teki: Mengapa Ia Tidak Berfungsi?
Seperti yang anda jangkakan, kod ini sepatutnya berfungsi tanpa masalah:
CREATE TABLE INVOICE( INVOICEDATE DATE NOT NULL DEFAULT CURRENT_DATE )
Walau bagaimanapun, amat mengejutkan kami, ia tidak. Apakah sebab di sebalik teka-teki ini?
Jawapan: Pengehadan MySQL
Jawapannya terletak pada pengehadan dalam MySQL. Walaupun bersifat intuitif, menetapkan nilai lalai lajur DATE kepada CURRENT_DATE atau CURDATE() tidak disokong.
Menurut dokumentasi MySQL, nilai lalai mestilah pemalar dan bukannya fungsi atau ungkapan. Ini menghapuskan kemungkinan menggunakan fungsi ini untuk menetapkan tarikh lalai secara dinamik.
Pengecualian: CURRENT_TIMESTAMP
Pengecualian kepada peraturan ini ialah CURRENT_TIMESTAMP. Fungsi ini boleh ditetapkan sebagai nilai lalai untuk lajur TIMESTAMP. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa ia mewakili detik semasa, bukan tarikh tertentu.
KEMASKINI: Dalam MySQL 8.0.13, terdapat perubahan ketara. CURRENT_DATE dan CURDATE() kini disokong sebagai nilai lalai untuk lajur DATE. Kemas kini ini menangani had yang dibincangkan dalam artikel ini.
Atas ialah kandungan terperinci Mengapa CURRENT_DATE/CURDATE() Tidak Berfungsi sebagai Nilai Lalai untuk Lajur MySQL DATE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!