Strict Mode

OnDemand

Top Contributor
Hallo zusammen, seit ich auf einem neuen Server bin , ebkomme ich eine Fehlermeldung bei einem INSERT oder UPDATE wenn ich eine Spalte in der DB nicht mit Daten füllen will sonder einfach ignoriere. LAut Goolgle sollte

SET @@global.sql_mode= '';

Abhilfe schaffen, aber nix da. Es kommt weiterhin der Error:

java.sql.SQLException: Field 'blabla' doesn't have a default value

Nun hab ich via root mal in die DB geschaut, da steht noch was von STRICT:
slave exec mode
dot.gif
STRICT

könnt dies das Problem sein? Ich kann jedenfalls nicht alle Datenbanken ändern und da einen default-Value hinterlegen, auf dem alten Server ging es ja auch.
Vielleicht kann mir jemand sagen, welche Konfiguration dafür verantwortlich ist.
 
K

kneitzel

Gast
Also ich würde Dir empfehlen, bei Datenbankzugriffen deutlich sorgfältiger zu sein. Fehler zu ignorieren und dann MySQL "irgendwas" machen zu lassen mit den Daten sehe ich als absolut gefährlich an.

Jetzt mag man argumentieren, dass Du genau weisst, was Du da machst. Aber irgendwie bezweifel ich das, denn sonst würdest Du das IGNORE Schlüsselwort kennen, welches INSERT und UPDATE Befehle von mysql kennen.

Ansonsten die Dokumentation von mysql bezüglich strict mode incl. der Erwähnung von IGNORE:
http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-strict
"If strict mode is not in effect, MySQL inserts adjusted values for invalid or missing values and produces warnings (see Section 13.7.5.40, “SHOW WARNINGS Syntax”). In strict mode, you can produce this behavior by using INSERT IGNORE or UPDATE IGNORE."

Aber ich würde erst einmal vermuten, dass Du da erst einmal zu sorglos mit den Daten umgehst ...

Konrad
 

OnDemand

Top Contributor
Hi, danke aber das hab ich alles schon durch :(
NO_ENGINE_SUBSTITUTION in sql_mode > bringt nix
sql_mode leer > bringt auch nix

Hab auch die alte mit der neuen DB verglichen finde keinen Unterschied
 

OnDemand

Top Contributor
Gibt es vielleicht eine Möglichkeit ALLE Spalten default null zu setzten wo kein defaultwert angegeben ist? Bei den spalten hat das der DB-Designer glaube einfach vergessen anzugeben, dass es NULL sein darf oder einen default zu setzen
 
K

kneitzel

Gast
Also Du kannst natürlich die Tabelle so editieren, dass mehr Felder auch NULL erlauben. ALTER TABLE ist dazu der Befehl: http://dev.mysql.com/doc/refman/5.7/en/alter-table.html

Solltest dann aber das Design auch genau prüfen. In allen Feldern null zu erlauben halte ich ggf. auch für problematisch.

Aber wenn das Design nicht die Anforderungen erfüllt, dann ist eine Anpassung des Designs ein wichtiger Schritt zur Lösung.

Konrad
 

OnDemand

Top Contributor
Problem ist ja, auf altem Server lief es ohne Probleme, habe am Code nix geändert. Datenbank migriert und bums...kam das Problem
 

thet1983

Top Contributor
warum setz du nicht einfach einen default wert?
bei einem INSERT INTO schreib einfach den Befehl default rein.
bei einem UPDATE brauchst du das ja nicht... lass in der abfrage einfach die column weg

zb.

Code:
CREATE TABLE <schema>.user
(id int primary key auto_increment,
name varchar(30) default 'NO NAME');

# -- insert anweisung mit  'default'  -- #
INSERT INTO <schema>.user(id,name) VALUES (null,default);

Oder hab ich das Problem nicht verstanden??
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben