# STRICT_ALL_TABLES ausschalten



## xrax (12. Okt 2016)

Hallo zusammen,

ich habe eine MySQL-Tabelle welche Felder besitzt die keinen Default-Wert haben und NULL=NO gesetzt haben.

Meine Query erzeugt daher einen Fehler wenn ich ein Feld nicht befülle.
Ausser ich setzte bevor ich die Query absetze:
"set @@sql_mode = '';"

Dies schält, wie ich meine, für diese Query den STRICT_ALL_TABLES - Mode aus.

Damit ich das nicht bei allen Querys machen muss möchte ich dies direkt bei der Erzeugung der Connection oder des Statements machen.

Weis jemand wie das geht ?

Ich benutze den com.mysql.jdbc.Driver auf MySQL 5.5.x

Besten Dank
xrax


----------



## VfL_Freak (12. Okt 2016)

Moin,

versteh ich das richtig?
Du möchtest ein Feld, dass NOTNULL ist, nicht füllen ???

Gruß Klaus


----------



## Thallius (12. Okt 2016)

Du willst also eine korrekte Fehlermeldung abschalten damit dein Fehler funktioniert? Sehr merkwürdiges Vorgehen....


----------



## xrax (12. Okt 2016)

@Thallius: Die Tabelle ist wie sie ist. Ich kann jetzt alle Feldwerte (nicht nur bei einer Tabelle) prüfen und eine passende Query bastelln, oder ich machs mit "set @@sql_mode = '';" 

@VfL_Freak: Ja ich will bzw. muss. Und zu meinem Erstaunen macht das die DB auch mit.


----------



## Thallius (12. Okt 2016)

Sorry aber ich kapier das nicht. Du willst in eine Tabelle eine neue Zeile schreiben welche Spalten enthält die nicht gefüllt sind, obwohl der Ersteller der DB gesagt hat es MUSS was drin stehen. Das ist doch, sorry, sau dämlich. Eventuell hat sich der Ersteller der DB ja was dabei gedacht? Was, wenn eine andere Software, welche die DB benutzt erwartet das dort Werte drin stehen und wenn nicht, dann abstürzt oder gar noch schlimmere Dinge tut (DB löschen weil invalide z.B.)?

Und JA! Du solltest für jede Tabelle eine passende Query basteln. Was denn auch sonst?


----------



## xrax (12. Okt 2016)

Hey Thallius,
es ist vollkommen egal ob das klug oder schlecht oder sonstwas vom DB-Ersteller ist.
Es geht auch nicht im geringsten darum ob Du die Gründe dafür verstehst oder sau dämlich findest.


> Und JA! Du solltest für jede Tabelle eine passende Query basteln. Was denn auch sonst?


Den STRICT_ALL_TABLES - Mode ausschalten.

Es sind zig Tabellen mit mit dutzenden Spalten. Du würdest nun für jede Spalte in der Eingabe prüfen für welches Feld du einen Wert hast und die Query entsprechend anpassen ?

Aber eine Diskussion mit Dir zu führen die ich bereits mit den Verantwortlichen geführt habe, deren und meine Bewegründe und Argumente aufzuführen, ist mir nun wirklich zu blöd.

Schade das sich keiner die Mühe macht auf meine Frage zu Antworten.

Beste Grüße
xrax


----------



## VfL_Freak (12. Okt 2016)

Moin,


xrax hat gesagt.:


> Aber eine Diskussion mit Dir zu führen die ich bereits mit den Verantwortlichen geführt habe, deren und meine Bewegründe und Argumente aufzuführen, ist mir nun wirklich zu blöd


Warum so dünnhäutig ?? 

Woher sollen wir denn wissen, dass Du solche Diskussionen geführt hast ??
Für mich klang Dein Eingangspost zugegebenermaßen mehr nach 'Unwissenheit' ..... 

Gruß Klaus

BTW: vlt. hilft Dir ja dieser Link: http://www.peterkropff.de/site/mysql/strict_modus.htm


----------



## Thallius (12. Okt 2016)

xrax hat gesagt.:


> Es sind zig Tabellen mit mit dutzenden Spalten. Du würdest nun für jede Spalte in der Eingabe prüfen für welches Feld du einen Wert hast und die Query entsprechend anpassen ?
> 
> xrax



Ja würde ich. Es gibt zwei Möglichkeiten eine vernünftige Lösung zu finden

1) Die Datenbank anpassen 
2) Sich an die Regeln der Datenbank halten.

Wenn also 1 ausscheeidet bleibt nur 2. Wenn das dann halt 100x länger dauert, dann kannst du das gegenüber dem Verantwortlichen so argumentieren. Was kümmert es dich wenn du nicht verantwortlich bist, dann bekommst du dein geld ja nach Aufwand.

Gruß

Claus


----------



## thet1983 (12. Okt 2016)

warum haust du nicht einfach einen defaultwert bei not null rein?


----------



## JuKu (31. Okt 2016)

xrax hat gesagt.:


> Meine Query erzeugt daher einen Fehler wenn ich ein Feld nicht befülle.
> Ausser ich setzte bevor ich die Query absetze:
> "set @@sql_mode = '';"



Aber genau das ist halt auch der Sinn hinter dem STRICT_ALL_TABLES Mode.
Wenn du NOT NULL gesetzt hast, darf halt kein Null rein.
Entweder schreibst du also einen Standardwert rein oder änderst die Tabellen Struktur so, dass sie NULL unterstützt.
Alles andere ist, wie die anderen hier schon geschrieben haben, einfach nur ein Trick durch die Hintertür, der aber dein eig. Problem nicht behebt.


----------

