# Strict Mode



## OnDemand (14. Feb 2016)

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
	

	
	
		
		

		
			





 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.


----------



## Meniskusschaden (14. Feb 2016)

Vielleicht hilft das:
http://stackoverflow.com/questions/25865104/field-id-doesnt-have-a-default-value


----------



## kneitzel (14. Feb 2016)

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 (14. Feb 2016)

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 (14. Feb 2016)

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


----------



## kneitzel (14. Feb 2016)

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 (14. Feb 2016)

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


----------



## thet1983 (17. Feb 2016)

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.


```
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??


----------

