Meja saya terlihat seperti
create table try ( name varchar(8), CREATED_BY varchar(40) not null);
lalu saya memiliki pemicu untuk mengisi bidang CREATED_BY secara otomatis
create trigger autoPopulateAtInsert BEFORE INSERT on try for each row set new.CREATED_BY=user();
Ketika saya melakukan penyisipan menggunakan
insert into try (name) values ('abc');
entri dibuat di tabel tetapi saya masih mendapatkan pesan kesalahan
Field 'CREATED_BY' doesn't have a default value Error no 1364
Apakah ada cara untuk menekan kesalahan ini tanpa membuat bidang menjadi nullable DAN tanpa menghapus triggfer? Jika tidak, hibernasi saya akan melihat pengecualian ini (meskipun penyisipan telah dibuat) dan kemudian aplikasi akan macet.
Ini disebabkan oleh
STRICT_TRANS_TABLES
mode SQL yang ditentukan di filemengajukan. Menghapus pengaturan itu dan memulai ulang MySQL akan menyelesaikan masalah.
Lihat https://www.farbeyondcode.com/Solution-for-MariaDB-Field--xxx--doesn-t-have-a-default-value-5-2720.html
Jika mengedit file tersebut tidak menyelesaikan masalah, lihat http://dev.mysql.com/doc/refman/5.6/en/option-files.html untuk kemungkinan lokasi file konfigurasi lainnya.
sumber
-- verified that the mode was previously set select @@GLOBAL.sql_mode; -- UPDATE MODE SET @@global.sql_mode= 'YOUR_VALUE';
Buka phpmyadmin dan buka Tab 'Lainnya' dan pilih submenu 'Variabel'. Gulir ke bawah untuk menemukan mode sql. Edit mode sql dan hapus 'STRICT_TRANS_TABLES' Simpan.
sumber
sudo nano /etc/mysql/my.cnf
menambah[mysqld] sql_mode = "ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
, menyimpan dan keluar, dan restart mysqlsudo service mysql restart
sql_mode
menjadi nol, yaitusql_mode = ""
untuk kesalahan serupa lainnya.Di phpmyadmin, lakukan hal berikut:
Dalam kasus saya, saya mendapatkan yang berikut:
Salin hasil ini dan hapus
STRICT_TRANS_TABLES
. Kemudian lakukan hal berikut:sumber
phpmyadmin
sama sekali, gunakan perintah ini dimysql
baris perintah.Ketika saya memiliki masalah yang sama dengan mysql5.6.20 yang diinstal dengan Homebrew, saya menyelesaikannya dengan masuk ke my.cnf
Temukan garis yang terlihat seperti ini:
Beri komentar di atas baris keluar dan mulai ulang server mysql
Kesalahan hilang!
sumber
Jalankan konsol mysql:
, pilih database:
dan jalankan (juga dari konsol mysql):
Itu akan mematikan mode ketat dan mysql tidak akan mengeluh lagi.
Untuk memperjelas: definisi database Anda mengatakan "bidang ini harus memiliki nilai default yang ditentukan", dan dengan melakukan langkah-langkah di atas Anda mengatakan ke MySql "neah, abaikan saja". Jadi, jika Anda hanya ingin melakukan perbaikan cepat secara lokal, solusi ini tidak masalah. Tetapi umumnya Anda harus menyelidiki dalam definisi database Anda dan memeriksa apakah bidang benar-benar membutuhkan nilai default dan jika demikian menyetelnya. Dan jika nilai default tidak diperlukan, persyaratan ini harus dihapus agar situasi bersih.
sumber
Seperti yang dikatakan orang lain, ini disebabkan oleh
STRICT_TRANS_TABLES
mode SQL.Untuk memeriksa apakah
STRICT_TRANS_TABLES
mode diaktifkan:Untuk menonaktifkan mode ketat:
sumber
Sebelum setiap tindakan penyisipan saya menambahkan baris di bawah dan menyelesaikan masalah saya,
Saya tidak yakin apakah ini solusi terbaik,
sumber
Ini berfungsi dan diuji Salin ke File Konfigurasi: /etc/mysql/my.cnf ATAU /bin/mysql/my.ini
kemudian mulai ulang MySQL
sumber
Ubah kueri Anda dan tambahkan "ABAIKAN" sebagai:
sumber
Untuk pengguna Windows WampServer :
WAMP> MySQL> my.ini
cari file untuk
sql-mode=""
Batalkan komentar.
sumber
sql-mode="STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER"sql-mode="STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER"
menjadisql-mode=""
. Tidak berkomentarsql-mode=""
menyebabkan kesalahan.Hal ini tampaknya disebabkan oleh bug yang sudah berlangsung lama (sejak 2004) (# 6295) di MySQL , berjudul
Itu diduga diperbaiki dalam versi 5.7.1 MySQL (Changelog, entri terakhir) pada tahun 2013, membuat MySQL berperilaku "sesuai standar SQL" (ibid).
sumber
NOT NULL
batasan atau menambahkan nilai default ke kolom memperbaiki masalah. Pemicu berfungsi seperti yang diharapkan.Di Windows Server, edit my.ini (misalnya file program \ mysql \ mysql server nn \ my.ini)
Saya tidak akan begitu saja mengatur sql-mode = "", melainkan saya menyarankan seseorang menghapus STRICT_TRANS_TABLES dari baris, membiarkan semuanya apa adanya, dan kemudian restart MySQL dari utilitas layanan. Tambahkan komentar untuk programmer masa depan siapa Anda dan apa yang Anda lakukan.
sumber
saya mengatur bidang menjadi tidak null dan masalah terpecahkan, itu diperbarui ketika sebuah informasi diperintahkan untuk disimpan di dalamnya, tidak ada lagi yang menunjukkan pesan msqli bahwa bidang itu kosong karena Anda tidak memasukkan nilai ke dalamnya, aplikasi solusi ini dapat bekerja pada beberapa proyek tergantung pada struktur proyek Anda.
sumber
default
atribut kolom darinone
menjadiNULL
. Kecuali jawaban peringkat tinggi! cPanel saya memberi saya akses ditolak pada shared hosting ketika saya mencoba memperbarui variabel sql_mode.saya memecahkan masalah mengubah file my.ini yang terletak di folder data. untuk mysql 5.6 file my.ini dipindahkan ke folder data bukan folder bin atau folder instalasi mysql.
sumber
Saya pikir dalam kolom nama memiliki nilai nol dalam kasus ini.
sumber