Mein Tisch sieht aus wie
create table try ( name varchar(8), CREATED_BY varchar(40) not null);
und dann habe ich einen Auslöser, um das Feld CREATED_BY automatisch zu füllen
create trigger autoPopulateAtInsert BEFORE INSERT on try for each row set new.CREATED_BY=user();
Wenn ich eine Einfügung mit mache
insert into try (name) values ('abc');
Der Eintrag erfolgt in der Tabelle, aber ich erhalte immer noch die Fehlermeldung
Field 'CREATED_BY' doesn't have a default value Error no 1364
Gibt es eine Möglichkeit, diesen Fehler zu unterdrücken, ohne das Feld auf Null zu setzen UND ohne den Trigger zu entfernen? Andernfalls werden in meinem Ruhezustand diese Ausnahmen angezeigt (obwohl die Einfügungen vorgenommen wurden), und die Anwendung stürzt ab.
Dies wird durch den
STRICT_TRANS_TABLES
in derDatei. Durch Entfernen dieser Einstellung und Neustarten von MySQL sollte das Problem behoben werden.
Siehe https://www.farbeyondcode.com/Solution-for-MariaDB-Field--xxx--doesn-t-have-a-default-value-5-2720.html
Wenn das Problem durch Bearbeiten dieser Datei nicht behoben werden kann, finden Sie unter http://dev.mysql.com/doc/refman/5.6/en/option-files.html weitere mögliche Speicherorte für Konfigurationsdateien.
quelle
-- verified that the mode was previously set select @@GLOBAL.sql_mode; -- UPDATE MODE SET @@global.sql_mode= 'YOUR_VALUE';
Öffnen Sie phpmyadmin und gehen Sie zur Registerkarte "Mehr" und wählen Sie das Untermenü "Variablen". Scrollen Sie nach unten, um den SQL-Modus zu finden. Bearbeiten Sie den SQL-Modus und entfernen Sie 'STRICT_TRANS_TABLES'. Speichern Sie ihn.
quelle
sudo nano /etc/mysql/my.cnf
hinzufügen[mysqld] sql_mode = "ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
, speichern undsudo service mysql restart
sql_mode
auf null ändern , dhsql_mode = ""
für andere ähnliche Fehler.Führen Sie in phpmyadmin Folgendes aus:
In meinem Fall bekomme ich folgendes:
Kopieren Sie dieses Ergebnis und entfernen Sie es
STRICT_TRANS_TABLES
. Führen Sie dann Folgendes aus:quelle
phpmyadmin
diese Befehle überhaupt nicht , verwenden Sie sie in dermysql
Befehlszeile.Als ich das gleiche Problem mit mysql5.6.20 hatte, das mit Homebrew installiert wurde, löste ich es, indem ich in my.cnf ging
Finden Sie die Linie, die so aussieht:
Kommentar oben Zeile aus und starten Sie MySQL-Server neu
Fehler weg!
quelle
Führen Sie die MySQL-Konsole aus:
, Datenbank auswählen:
und ausführen (auch von der MySQL-Konsole):
Dadurch wird der strikte Modus deaktiviert und MySQL wird sich nicht mehr beschweren.
Um die Dinge klarer zu machen: In Ihrer Datenbankdefinition heißt es "Für dieses Feld muss der Standardwert definiert sein", und wenn Sie die Schritte von oben ausführen, sagen Sie zu MySql "Nein, ignorieren Sie es einfach". Wenn Sie also nur eine schnelle lokale Lösung durchführen möchten, ist diese Lösung in Ordnung. Im Allgemeinen sollten Sie jedoch in Ihrer Datenbankdefinition nachsehen, ob das Feld wirklich einen Standardwert benötigt, und ihn gegebenenfalls festlegen. Und wenn der Standardwert nicht benötigt wird, sollte diese Anforderung entfernt werden, um eine saubere Situation zu haben.
quelle
Wie andere sagten, wird dies durch den
STRICT_TRANS_TABLES
SQL-Modus verursacht.So überprüfen Sie, ob der
STRICT_TRANS_TABLES
Modus aktiviert ist:So deaktivieren Sie den strengen Modus:
quelle
Vor jeder Einfüge-Aktion habe ich die folgende Zeile hinzugefügt und mein Problem gelöst.
Ich bin mir nicht sicher, ob dies die beste Lösung ist.
quelle
Seine Arbeit und getestete Kopie in Konfigurationsdatei: /etc/mysql/my.cnf ODER /bin/mysql/my.ini
Starten Sie dann MySQL neu
quelle
Ändern Sie Ihre Abfrage und fügen Sie "IGNORE" hinzu als:
quelle
Für Windows WampServer- Benutzer:
WAMP> MySQL> my.ini
Datei suchen nach
sql-mode=""
Kommentieren Sie es aus.
quelle
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"
zusql-mode=""
. Das Auskommentierensql-mode=""
verursachte den Fehler.Dies scheint auf einen langjährigen (seit 2004) Fehler (# 6295) in MySQL mit dem Titel zurückzuführen zu sein
Es wurde angeblich in Version 5.7.1 von MySQL (Changelog, letzter Eintrag) im Jahr 2013 behoben , wodurch sich MySQL wie „gemäß dem SQL-Standard“ verhält (ebenda).
quelle
NOT NULL
Einschränkung oder das Hinzufügen eines Standardwerts zur Spalte hat das Problem behoben. Der Trigger funktioniert wie erwartet.Bearbeiten Sie in Windows Server my.ini (z. B. Programmdateien \ mysql \ mysql server nn \ my.ini).
Ich würde nicht einfach den sql-mode = "" setzen, sondern ich schlage vor, STRICT_TRANS_TABLES aus der Zeile zu entfernen, alles so zu lassen, wie es war, und dann MySQL über das Dienstprogramm services neu zu starten. Fügen Sie einen Kommentar für zukünftige Programmierer hinzu, wer Sie sind und was Sie getan haben.
quelle
Ich setze die Felder auf nicht null und das Problem wurde behoben. Es wird aktualisiert, wenn befohlen wird, Informationen darin zu speichern. Es wird keine msqli-Meldung mehr angezeigt, dass das Feld leer war, weil Sie keinen Wert in das Feld eingefügt haben. Die Anwendung dieser Lösung kann bei einigen funktionieren Projekte hängen von Ihrer Projektstruktur ab.
quelle
default
Attribut der Spalte vonnone
bis geändert wurdeNULL
. Es sei denn, es gibt Antworten mit hoher Bewertung! Mein cPanel hat mir den Zugriff auf Shared Hosting verweigert, als ich versuchte, die Variable sql_mode zu aktualisieren.Ich habe das Problem beim Ändern der Datei my.ini im Datenordner gelöst. Für MySQL 5.6 wurde die Datei my.ini in den Datenordner verschoben, nicht in den Installationsordner bin oder mysql.
quelle
Ich denke in der Namensspalte haben in diesem Fall Nullwerte.
quelle