Saya punya pernyataan buat sql berikut
mysql> CREATE TABLE IF NOT EXISTS `erp`.`je_menus` (
-> `id` INT(11) NOT NULL AUTO_INCREMENT ,
-> `name` VARCHAR(100) NOT NULL ,
-> `description` VARCHAR(255) NOT NULL ,
-> `live_start_date` DATETIME NULL DEFAULT NULL ,
-> `live_end_date` DATETIME NULL DEFAULT NULL ,
-> `notes` VARCHAR(255) NULL ,
-> `create_date` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
-> `created_by` INT(11) NOT NULL ,
-> `update_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
-> `updated_by` INT(11) NOT NULL ,
-> `status` VARCHAR(45) NOT NULL ,
-> PRIMARY KEY (`id`) )
-> ENGINE = InnoDB;
memberikan kesalahan berikut
ERROR 1067 (42000): Invalid default value for 'create_date'
Apa kesalahannya di sini?
Jawaban:
Itu karena Mode SQL server - NO_ZERO_DATE .
Dari referensi:
NO_ZERO_DATE
- Dalam mode ketat, jangan izinkan'0000-00-00'
sebagai tanggal yang valid. Anda masih dapat memasukkan tanggal nol dengan opsi IGNORE . Ketika tidak dalam mode ketat, tanggal diterima tetapi peringatan dihasilkan.sumber
Jika Anda membuat skrip dari meja kerja MySQL.
Baris berikut dihasilkan
Hapus TRADITIONAL dari SQL_MODE, dan kemudian skrip akan berfungsi dengan baik
Selain itu, Anda dapat mengatur SQL_MODE sebagai Izinkan Tanggal Tidak Valid
sumber
TIMESTAMP memiliki rentang '1970-01-01 00:00:01' UTC hingga '2038-01-19 03:14:07' UTC (lihat dokumen ). Nilai default harus dalam kisaran itu.
Perilaku aneh, terkait, lainnya:
Catatan, jika Anda ingin memasukkan NULLS:
sumber
column_name TIMESTAMP DEFAULT NOW()
. Mungkin tidak sesuai untuk setiap situasi tetapi saya pikir saya akan berbagi karena saya berurusan dengan ini juga.Di ubuntu desktop 16.04, saya melakukan ini:
buka file:
/etc/mysql/mysql.conf.d/mysqld.cnf
di editor pilihan Anda.Cari:,
sql_mode
itu akan berada di suatu tempat di bawah[mysqld]
.dan atur
sql_mode
sebagai berikut:NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Simpan dan mulai kembali layanan mysql dengan melakukan:
sudo service mysql restart
sumber
sql_mode
tidak ada untuk contoh mySQL saya di ubuntu16.04. Saya harus menambahkan entri untuk itu dalam file, dengan menghapus "NO_ZERO_DATE". Jadi, di sini adalah bagaimana tampak sekarang: #Adding di bawah garis untuk menyingkirkan no_zero_date sql_mode = ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTIONsql_mode
entri sudah ada di sana.Menggunakan OS X , instal mysql dari Homebrew , System Variables berdasarkan pada default yang dikompilasi. Solusinya adalah menghapus "NO_ZERO_DATE" dari Variabel Sistem "sql_mode".
Hanya perlu diingat bahwa ruang lingkup melibatkan.
Jika Anda hanya ingin memengaruhi sesi Anda, silakan gunakan
"@@session"
, Misalnya:Dalam hal ini, itu tidak akan memengaruhi begitu sesi Anda berakhir atau mengubahnya. Itu tidak berpengaruh pada sesi lain.
Jika Anda ingin memengaruhi semua klien, silakan gunakan
"@@global"
, misalnya:Dalam hal ini, itu hanya mempengaruhi klien yang terhubung setelah perubahan (tidak mempengaruhi semua klien saat ini), dan tidak akan berfungsi setelah server keluar.
sumber
Saya dapat mengatasi masalah ini pada OS X dengan menginstal MySQL dari Homebrew
dengan menambahkan berikut ini ke /usr/local/etc/my.cnf
dan me-restart MySQL
sumber
Saya punya masalah serupa dengan MySQL 5.7 dengan kode berikut:
`update_date` TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP
Saya memperbaiki dengan menggunakan ini sebagai gantinya:
`update_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
sumber
Untuk menghindari masalah ini, Anda perlu menghapus
NO_ZERO_DATE
dari konfigurasi mode mysql.NO_ZERO_DATE
(dan koma yang tertinggal) dari konfigurasi.Ini adalah masalah yang sangat umum di lingkungan lokal dengan wamp atau xamp.
sumber
Tentukan baris berikut di atas file SQL Database Anda.
Ini bekerja untuk saya.
sumber
Untuk menonaktifkan mode SQL yang ketat
Dalam file tersebut, masukkan dua baris ini:
Terakhir, restart MySQL dengan perintah ini:
sumber
Anda mungkin ingin memeriksa pengaturan zona waktu pada instance MySql:
dalam kasus saya, saya menyadari bahwa sistem yang mendasari menetapkan zona waktu untuk BST daripada UTC, dan dalam tabel buat default '1970-01-01 00:00:01' dipaksa kembali 1 jam, menghasilkan nilai cap waktu yang tidak valid.
Bagi saya, saya benar-benar menginginkan zona waktu mesin diatur ke UTC, dan hal itu menyurutkan saya. Ketika saya menjalankan Centos / 7, saya hanya melakukannya
dan memulai kembali semuanya.
sumber
Nilai default harus dimulai dari tahun 1000.
Sebagai contoh,
Semoga ini bisa membantu seseorang.
sumber
Ubah ini:
Berikut ini:
sumber
Anda bisa mengubah ini:
Untuk sesuatu seperti ini:
sumber
Anda bisa mengubah ini:
create_date
datetime TIDAK NULL DEFAULT '0000-00-00 00:00:00',Untuk sesuatu seperti ini:
create_date
varchar (80) BUKAN NULL DEFAULT '0000-00-00 00:00:00',sumber