Mój stół wygląda
create table try ( name varchar(8), CREATED_BY varchar(40) not null);
a następnie mam wyzwalacz do automatycznego wypełniania pola CREATED_BY
create trigger autoPopulateAtInsert BEFORE INSERT on try for each row set new.CREATED_BY=user();
Kiedy robię wkładkę za pomocą
insert into try (name) values ('abc');
wpis jest wykonany w tabeli, ale nadal otrzymuję komunikat o błędzie
Field 'CREATED_BY' doesn't have a default value Error no 1364
Czy istnieje sposób na wyeliminowanie tego błędu bez dopuszczania wartości zerowej pola ORAZ bez usuwania wyzwalacza? W przeciwnym razie moja hibernacja zobaczy te wyjątki (mimo że wstawki zostały wykonane), a następnie aplikacja ulegnie awarii.
Jest to spowodowane
STRICT_TRANS_TABLES
trybem SQL zdefiniowanym wplik. Usunięcie tego ustawienia i ponowne uruchomienie MySQL powinno rozwiązać problem.
Zobacz https://www.farbeyondcode.com/Solution-for-MariaDB-Field--xxx--doesn-t-have-a-default-value-5-2720.html
Jeśli edycja tego pliku nie rozwiąże problemu, zobacz http://dev.mysql.com/doc/refman/5.6/en/option-files.html, aby poznać inne możliwe lokalizacje plików konfiguracyjnych.
źródło
-- verified that the mode was previously set select @@GLOBAL.sql_mode; -- UPDATE MODE SET @@global.sql_mode= 'YOUR_VALUE';
Otwórz phpmyadmin, przejdź do zakładki „Więcej” i wybierz podmenu „Zmienne”. Przewiń w dół, aby znaleźć tryb sql. Edytuj tryb sql i usuń „STRICT_TRANS_TABLES” Zapisz go.
źródło
sudo nano /etc/mysql/my.cnf
dodaj[mysqld] sql_mode = "ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
, zapisz i wyjdź, a następnie uruchom ponownie mysqlsudo service mysql restart
sql_mode
na null, czylisql_mode = ""
dla innych podobnych błędów.W phpmyadmin wykonaj następujące czynności:
W moim przypadku otrzymuję:
Skopiuj ten wynik i usuń
STRICT_TRANS_TABLES
. Następnie wykonaj następujące czynności:źródło
phpmyadmin
, użyj tych poleceń wmysql
wierszu poleceń.Kiedy miałem ten sam problem z mysql5.6.20 zainstalowanym z Homebrew, rozwiązałem go, przechodząc do my.cnf
Znajdź linię, która wygląda tak:
Skomentuj powyżej linii i zrestartuj serwer mysql
Błąd zniknął!
źródło
Uruchom konsolę mysql:
wybierz bazę danych:
i uruchom (także z konsoli mysql):
Spowoduje to wyłączenie trybu ścisłego, a mysql nie będzie już narzekać.
Dla jasności: definicja bazy danych mówi, że „to pole musi mieć zdefiniowaną wartość domyślną”, a wykonując kroki z góry, mówisz do MySql „neah, po prostu je zignoruj”. Więc jeśli chcesz tylko szybko naprawić lokalnie, to rozwiązanie jest w porządku. Ale generalnie powinieneś zbadać definicję swojej bazy danych i sprawdzić, czy pole naprawdę wymaga wartości domyślnej, a jeśli tak, ustaw ją. A jeśli wartość domyślna nie jest potrzebna, to wymaganie powinno zostać usunięte, aby uzyskać czysty stan.
źródło
Jak powiedzieli inni, jest to spowodowane
STRICT_TRANS_TABLES
trybem SQL.Aby sprawdzić, czy
STRICT_TRANS_TABLES
tryb jest włączony:Aby wyłączyć tryb ścisły:
źródło
Przed każdą czynnością wstawiania dodałem poniższy wiersz i rozwiązałem problem,
Nie jestem pewien, czy to najlepsze rozwiązanie,
źródło
Jego praca i przetestowana kopia do pliku konfiguracyjnego: /etc/mysql/my.cnf LUB /bin/mysql/my.ini
następnie uruchom ponownie MySQL
źródło
Zmodyfikuj zapytanie i dodaj „IGNORUJ” jako:
źródło
Użytkownicy Windows WampServer :
WAMP> MySQL> my.ini
wyszukaj plik
sql-mode=""
Odkomentuj to.
źródło
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"
nasql-mode=""
. Odkomentowaniesql-mode=""
spowodowało błąd.Wydaje się, że jest to spowodowane długotrwałym (od 2004) błędem (# 6295) w MySQL , zatytułowanym
Zostało to rzekomo naprawione w wersji 5.7.1 MySQL (Changelog, ostatni wpis) w 2013 roku, sprawiając, że MySQL zachowuje się „zgodnie ze standardem SQL” (ibid).
źródło
NOT NULL
ograniczenia lub dodanie wartości domyślnej do kolumny rozwiązało problem. Wyzwalacz działa zgodnie z oczekiwaniami.W systemie Windows Server edytuj plik my.ini (na przykład program files \ mysql \ mysql server nn \ my.ini)
Nie chciałbym po prostu ustawić sql-mode = "", raczej sugeruję usunięcie STRICT_TRANS_TABLES z linii, pozostawienie wszystkiego tak, jak było, a następnie ponowne uruchomienie MySQL z narzędzia usług. Dodaj komentarz dla przyszłych programistów, kim jesteś i co zrobiłeś.
źródło
ustawiłem pola na niezerowe i problem rozwiązany, aktualizuje się, gdy nakazuje się przechowywać w nim informacje, nie ma już pokazywania komunikatu msqli, że pole jest puste, bo nie wstawiłeś do niego wartości, dobrze zastosowanie tego rozwiązania może działać na niektórych projekty zależy od struktury projektu.
źródło
default
atrybut kolumny znone
naNULL
. Chyba że odpowiedzi na wysokie oceny! mój cPanel dawał mi odmowę dostępu do hostingu współdzielonego, gdy próbowałem zaktualizować zmienną sql_mode.rozwiązałem problem ze zmianą pliku my.ini znajdującego się w folderze danych. dla mysql 5.6 plik my.ini został przeniesiony do folderu danych, a nie do folderu instalacyjnego bin lub mysql.
źródło
Myślę, że w tym przypadku kolumna z nazwą ma wartości null.
źródło