Nilai default tidak valid untuk 'dateAdded'

91

Saya mendapat masalah bodoh dengan SQL yang tidak bisa saya perbaiki.

ALTER TABLE `news` 
 ADD `dateAdded` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AUTO_INCREMENT,
 TAMBAHKAN KUNCI UTAMA (`dateAdded`)

Kesalahan:

(#1067)Invalid default value for 'dateAdded'

Ada yang bisa membantu saya?

Robin Van den Broeck
sumber
9
Ini mungkin pertanyaan yang bodoh, tapi kenapa kamu AUTO_INCREMENT DATETIME?
jave.

Jawaban:

138

CURRENT_TIMESTAMPhanya dapat diterima di TIMESTAMPlapangan.DATETIMEbidang harus dibiarkan dengan nilai default null, atau tanpa nilai default sama sekali - nilai default harus berupa nilai konstan, bukan hasil ekspresi.

dokumen yang relevan: http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html

Anda dapat menyiasatinya dengan menyetel pemicu pasca-penyisipan pada tabel untuk mengisi nilai "sekarang" pada setiap rekaman baru.

Marc B
sumber
70
Sepertinya pada mysql 5.6.5, Anda dapat menggunakan CURRENT_TIMESTAMP dengan bidang DATETIME. Lihat dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html
Frank Schwieterman
2
Terima kasih Frank, menemukan masalah ini saat mencoba mengimpor db yang telah diekspor dari xampp terbaru ke yang sebelumnya.
HCD
HCD, Frank ... menemukan masalah yang sama saat mengekspor dari MariaDb 10.x ke MariaDB 5.5 ... terima kasih
Aukhan
1
Kesalahan ini juga terjadi di mariadb 5.5. Tingkatkan ke mariadb 10 dan penyelesaiannya. Terima kasih Frank
Samuel Tesler
51

CURRENT_TIMESTAMPadalah versi khusus dan sekarang diizinkan untuk DATETIMEkolom pada versi 5.6.

Lihat dokumen MySQL .

David Soussan
sumber
9
apakah kamu yakin Saya mendapatkan kesalahan di atas dalam versi 5.7.x
Ramesh Pareek
17

Perhatikan juga saat menentukan DATETIMEas DATETIME(3)atau like pada MySQL 5.7.x, Anda juga harus menambahkan nilai yang sama untuk CURRENT_TIMESTAMP(3). Jika tidak, itu akan terus memunculkan ' Nilai default tidak valid '.

Torsten Ojaperv
sumber
1
Ini memecahkan masalah saya di 5.7.x. Bidang datetime saya didefinisikan sebagai datetime (6) dan menggunakan CURRENT_TIMESTAMP (6) memecahkan masalah
Brad
1
Ini sangat penting untuk diperhatikan.
Mateus Felipe
1

Saya memiliki masalah yang sama, setelah perbaikan menyelesaikan masalah saya.

  • Pilih Jenis sebagai 'TIMESTAMP'

  • JANGAN MASUKKAN APA PUN DI BIDANG PANJANG / NILAI. TETAP KOSONG

  • Pilih CURRENT_TIMESTAMP sebagai nilai Default.

Saya menggunakan MySQL ver 5.5.56

Darshn
sumber
0

Saya memiliki mysql versi 5.6.27 di LEMP dan CURRENT_TIMESTAMP saya karena nilai default berfungsi dengan baik.

Abraham Tugalov
sumber
0

mysql versi 5.5 menetapkan nilai default datetime sebagai CURRENT_TIMESTAMP akan melaporkan kesalahan Anda dapat memperbarui ke versi 5.6, itu menetapkan nilai default waktu sebagai CURRENT_TIMESTAMP

张春吉
sumber
0

Ubah tipe dari datetime ke timestamp dan itu akan berhasil! Saya memiliki masalah yang sama untuk mysql 5.5.56-MariaDB - Server MariaDB Semoga dapat membantu ... maaf jika dikosongkan

Hamid ER-REMLI
sumber