Rumah >pangkalan data >tutorial mysql >Mengapa CURRENT_DATE/CURDATE() Tidak Berfungsi sebagai Nilai Lalai untuk Lajur MySQL DATE?

Mengapa CURRENT_DATE/CURDATE() Tidak Berfungsi sebagai Nilai Lalai untuk Lajur MySQL DATE?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-20 02:53:09466semak imbas

Why Doesn't CURRENT_DATE/CURDATE() Work as a Default Value for MySQL DATE Columns?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn