STRICT_ALL_TABLES ausschalten

xrax

Aktives Mitglied
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
 

xrax

Aktives Mitglied
@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

Top Contributor
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

Aktives Mitglied
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

Top Contributor
Moin,
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 ?? :oops:

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

Top Contributor
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
 

JuKu

Top Contributor
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.
 

Ähnliche Java Themen

Neue Themen


Oben