Umgang mit dem Strict Mode

exzel

SQL-Guru
Beiträge
170
Hallo zusammen,

ich habe beim Programmieren einer einfach Eingabemaske mit drei Feldern festgestellt. In das erste Feld kommt ein String, in das zweite ein Integer und das dritte ist vom Typ Decimal.

Ich erhielt beim Speichern aber immer die Meldung:"1366: Incorrect integer value: '' for column 'zahl1' at row 1", sobald eines der beiden Nummerfelder leer war. Das Feld mit dem String machte kein Probleme. Egal ob es gefüllt war oder nicht.

Nach einiger Rechereche stieß ich auf den Strict Mode von MySQL. Dieser benötigt einen Wert oder aber es muss im Query NULL (nicht 'NULL') stehen anstelle des Feldnamens.

Was ich auch hier bestätigt fand.
http://stackoverflow.com/questions/...ct-integer-value-null-for-column-cid-at-row-1
http://stackoverflow.com/questions/2536199/1366-incorrect-integer-valuemysql

Meine Frage. Wie geht man damit um? Den Strict Mode möchte ich nicht abestellen. NULL in den Query zu schreiben macht auch keinen Sinn, da der Feldwert der Maske natürlich übernommen werden sollte.

Kann man dann das Problem überhaupt auf Datenbankebene lösen oder muss die Anwendung leere Werte automatisch ausfüllen?

Gruß

Alex
 
Werbung:
Meine Frage. Wie geht man damit um? Den Strict Mode möchte ich nicht abestellen. NULL in den Query zu schreiben macht auch keinen Sinn, da der Feldwert der Maske natürlich übernommen werden sollte.

Kann man dann das Problem überhaupt auf Datenbankebene lösen oder muss die Anwendung leere Werte automatisch ausfüllen?

Sicher läßt sich das lösen. Kannst Du uns zeigen:

  • create table
  • die Insert-Befehle, die an die DB gehen

Möglicherweise hast das als NOT NULL definiert.
 
Hallo,

also die Tabelle habe ich mit dem Programm Scriptcase erstellt. Der Befehl lautet wie folgt.

sc_exec_sql("INSERT INTO test (text, zahl1, zahl2) VALUES ('{text}', '{int}' , '{decimal}')");

Die Klammern sind notwendig, da Scriptcase den Inhalt aus Formularfeldern auf diese Art und Weise verarbeitet. Zur Lösungssuche trägt das ganze natürlich nicht bei, aber die o.g. Links zeigen das Problem nochmals auf.

Gruß

Alex
 

Anhänge

  • Tabelle.PNG
    Tabelle.PNG
    3,6 KB · Aufrufe: 9
Hallo,

also die Tabelle habe ich mit dem Programm Scriptcase erstellt. Der Befehl lautet wie folgt.

Ich denke mal, ich kann mit PG Deinen Fehler nachstellen:

Code:
test=# create table exzel (i int);
CREATE TABLE
test=*# insert into exzel values ('1');
INSERT 0 1
test=*# insert into exzel values ('');
ERROR:  invalid input syntax for integer: "" at character 27
STATEMENT:  insert into exzel values ('');
ERROR:  invalid input syntax for integer: ""
LINE 1: insert into exzel values ('');

Fragen?
 
Also ich habe die Spalten mit NULL definiert. Für mich sieht dein Entwurf so aus, als ob die Spalten als NOT NULL definiert sind.
 
Also ich habe die Spalten mit NULL definiert. Für mich sieht dein Entwurf so aus, als ob die Spalten als NOT NULL definiert sind.

Nein, denn er hat geschrieben "create table exzel (i int);", damit ist die Spalte i NULLable. Wenn sie mit NOT NULL definiert wären stünde da "create table exzel (i int) NOT NULL;"

VALUES ('{text}', '{int}' , '{decimal}')");

Warum ist der Integer-Wert unter Hochkomma? Int ist ja eine Zahl und kein Text.
 
Hallo und danke für die Antworten.

sc_exec_sql("INSERT INTO test (text, zahl1, zahl2) VALUES ('{text}', {int} , {decimal})");

Funktioniert leider auch nicht.

Fehlermeldung:"INSERT INTO test (text, zahl1, zahl2) VALUES ('', , )

1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' )' at line 1"

Gruß
 
Fehlermeldung:"INSERT INTO test (text, zahl1, zahl2) VALUES ('', , )

1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' )' at line 1"

Ist auch logisch.

Code:
test=*# create table excel(a int, b int, c int);
CREATE TABLE
test=*# insert into excel values (1,2,3);
INSERT 0 1
test=*# insert into excel values ('1','2','3');
INSERT 0 1
test=*# insert into excel values (1,,);
ERROR:  syntax error at or near "," at character 29
STATEMENT:  insert into excel values (1,,);
ERROR:  syntax error at or near ","
LINE 1: insert into excel values (1,,);

Fange das halt in deiner Applikation ab.
 
Hallo zusammen,

ok, dann weiß ich bescheid wie ich das löse.

Ich hab mir das nochmals in meiner vorherigen DB von unserem Webhoster angesehen.

Dort konnte ich mit dem Befehl durchaus Werte einfügen, wie auch die Bilder bestätigen.

INSERT INTO asdf (test) VALUES ('');


Anscheinend lief die DB nicht im Strict Mode. Es handelt sich um mySQL.

Gruß und Dank!
 

Anhänge

  • Befehl.PNG
    Befehl.PNG
    16,5 KB · Aufrufe: 2
  • Tabelle.PNG
    Tabelle.PNG
    34,2 KB · Aufrufe: 4
Anscheinend lief die DB nicht im Strict Mode.

Kann sein. Strict-Mode in MySQL zu verwenden ist kein Fehler. Allerdings laufen z.B. viele CMS-Systeme und andere Dinge, die weit verbreitet sind, NICHT im Strict-Mode. Als Hoster wäre man schön blöd, da den Strict-Mode einzuschalten - der Support-Aufwand würde explodieren.
 
Werbung:
Zurück
Oben