Saya memiliki dua kolom di tabel pengguna yaitu registerDate and lastVisitDate
yang terdiri dari tipe data datetime. Saya ingin melakukan hal berikut.
- Setel nilai default registerDate ke MySQL NOW ()
- Tetapkan nilai default lastVisitDate menjadi
0000-00-00 00:00:00
Alih-alih nol yang digunakan secara default.
Karena tabel sudah ada dan memiliki catatan, saya ingin menggunakan tabel Ubah. Saya sudah mencoba menggunakan dua bagian kode di bawah ini, tetapi tidak berhasil.
ALTER TABLE users MODIFY registerDate datetime DEFAULT NOW()
ALTER TABLE users MODIFY registerDate datetime DEFAULT CURRENT_TIMESTAMP;
Itu memberi saya Kesalahan: ERROR 1067 (42000): Invalid default value for 'registerDate'
Apakah mungkin bagi saya untuk menetapkan nilai datetime default ke SEKARANG () di MySQL?
mysql
sql
datetime
mysql-error-1067
Ibrahim Azhar Armar
sumber
sumber
ALTER TABLE users MODIFY dateTime timestamp default CURRENT_TIMESTAMP
. Anda tidak mendefinisikandata type
bidang dalam kedua upaya AndaDATE
harus bekerja dengan nilai defaultNOW()
Jawaban:
Pada MySQL 5.6.5, Anda dapat menggunakan
DATETIME
tipe dengan nilai default dinamis:Atau bahkan menggabungkan kedua aturan:
Referensi:
http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html
http://optimize-this.blogspot.com/2012/04/datetime-default-now-finally-available .html
Sebelum 5.6.5, Anda perlu menggunakan
TIMESTAMP
tipe data, yang secara otomatis memperbarui setiap kali catatan diubah. Sayangnya, bagaimanapun, hanya satuTIMESTAMP
bidang yang diperbarui secara otomatis dapat ada per tabel.Lihat: http://dev.mysql.com/doc/refman/5.1/en/create-table.html
Jika Anda ingin mencegah MySQL memperbarui nilai cap waktu pada
UPDATE
(sehingga hanya memicuINSERT
) Anda dapat mengubah definisi menjadi:sumber
DATETIME
sering lebih disukai untuk melakukan rentang yang dapat ditampungnya: '1000-01-01 00:00:00' hingga '9999-12-31 23:59:59' dibandingkan denganTIMESTAMPS
's' 1970-01-01 00: 00:01 'UTC hingga' 2038-01-19 03:14:07 'UTC. Untuk keperluan menyimpan tanggal lahir, atau sesuatu yang lebih dari 30 tahun di masa depan misalnya.timestamp
untuk perilaku ini pada MySQL 5.6Saya menggunakan pemicu sebagai solusi untuk menetapkan bidang datetime ke SEKARANG () untuk sisipan baru:
itu harus bekerja untuk pembaruan juga
Jawaban oleh Johan & Leonardo melibatkan pengubahan ke bidang stempel waktu. Meskipun ini mungkin ok untuk use case yang disajikan dalam pertanyaan (menyimpan RegisterDate dan LastVisitDate), ini bukan solusi universal. Lihat pertanyaan datetime vs timestamp .
sumber
use a timestamp
merupakan solusi bodoh jika Anda benar-benar mempelajari perbedaan antara kedua tipe data ini.Solusi saya
sumber
TIMESTAMP
kolom. Tidak ada yang memintaTIMESTAMP
...EUREKA !!!
Untuk semua yang kehilangan hati mencoba untuk menetapkan nilai DATETIME default di MySQL , saya tahu persis bagaimana perasaan Anda / rasakan. Jadi begini:
Hati-hati mengamati bahwa saya belum menambahkan tanda kutip tunggal / tanda kutip ganda sekitar 0 .
Pembaruan penting :
Jawaban ini telah diposting sejak lama. Saat itu, itu berhasil pada instalasi MySQL saya (mungkin terbaru) dan saya merasa ingin membagikannya. Silakan baca komentar di bawah sebelum Anda memutuskan untuk menggunakan solusi ini sekarang.
sumber
mysql 5.6 dokumen mengatakan bahwa CURRENT_TIMESTAMP dapat digunakan sebagai default untuk tipe data TIMESTAMP dan DATETIME:
http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html
sumber
Pada versi mysql 5.6.5 dan yang lebih baru, Anda dapat menggunakan datetimes yang tepat dan menetapkan nilai default juga. Ada sedikit yang halus, yaitu untuk memberikan nilai presisi untuk kedua fungsi waktu dan panggilan SEKARANG ().
Contoh Ini Berhasil:
Contoh Ini Tidak Berfungsi:
sumber
Dapat digunakan untuk memperbarui timestamp saat pembaruan.
sumber
Cara terbaik menggunakan "DEFAULT 0". Cara lain:
sumber
Ini bekerja untuk saya, menggunakan MySQL:
sumber
Akhirnya, ini berhasil bagi saya!
sumber
sumber
Tidak yakin apakah ini masih aktif tetapi ini dia.
Mengenai pengaturan default ke Sekarang (), saya tidak melihat itu mungkin untuk tipe data DATETIME. Jika Anda ingin menggunakan tipe data itu, atur tanggal ketika Anda melakukan insert seperti ini:
Versi mySQL saya adalah 5.5
sumber
INSERT INTO Yourtable (Field1, YourDateField) VALUES('val1', NOW())
Ini bekerja untuk saya - baru saja mengubah INSERT menjadi UPDATE untuk tabel saya.
sumber