crimson
Goto Top

MySQL Server Incorrect integer value

Ich habe ein Integer Problem...

Ich momentan laufen meine PHP Scripte auf einem Linux Webspace, wir haben uns nun entschlossen auf einen Server umzusteigen.
Wir haben uns für einen Windows Server entschieden, ob das nun gut, schlecht, vor- oder unvorteilhaft ist sei dahingestellt!

Ich benutze den Microsoft Webserver IIS 7.5, den MySQL Server (Version: 5.1.44-community) und PHP 5.2.13

Jetzt zu meinem Problem, wenn ich ein Script aufrufe in dem ein Integer Wert nicht gegeben, also leer ist, dann sendet er mir verständlicherweise Incorrect integer value zurück.
Auf dem Linux Space wurde sowas aber einfach umgewandelt in den Wert 0 und somit wurden keine Fehler fabriziert, kann mir jemand von euch helfen das das auch so auf der Windows Maschine geht.

Den ganzen Code umscheiben das ist keine Lösung für mich und würde auch sehr lange dauern.


Liebe Grüße
Crimson

Content-ID: 138736

Url: https://administrator.de/forum/mysql-server-incorrect-integer-value-138736.html

Ausgedruckt am: 26.12.2024 um 18:12 Uhr

Dani
Dani 20.03.2010 um 23:23:29 Uhr
Goto Top
Hi Crimson,
es wäre hilfreich wenn du die entsprechenden Zeilen noch posten würdest. Denn eigentlich sollte das Statement auf beiden Typen funktionieren bzw. ich entwickle auf Windows und Produktiv läuft die Seite auf Linux und noch nie Probleme gehabt - außer du benutzt spezielle Funktionen.


Grüße,
Dani
Crimson
Crimson 24.03.2010 um 00:40:06 Uhr
Goto Top
Incorrect integer value: '' for column 'tech_old_rank' at row 1
INSERT INTO game_uni1statpoints SET `id_owner` = '2', `id_ally` = '3', `stat_type` = '1', `stat_code` = '1', `tech_points` = '55104557.4', `tech_count` = '224', `tech_old_rank` = '', `build_points` = '10025456365478', `build_count` = '2401', `build_old_rank` = '', `defs_points` = '975787985', `defs_count` = '366670312', `defs_old_rank` = '', `fleet_points` = '9620798118', `fleet_count` = '1963174204', `fleet_old_rank` = '', `total_points` = '10036108056138', `total_count` = '2329847141', `total_old_rank` = '0', `stat_date` = '1269384708';

So sieht die Fehlermeldung aus, es ist schon klar das tech_old_rank keinen Wert hat, dennoch funktioniert dies unter dem auf Linux basierenden Webserver und auf meinem Laptop.
Auf meinem Laptop läuft XAMPP als Umgebung.
Dani
Dani 24.03.2010 um 18:37:45 Uhr
Goto Top
Schau mal in der Tabellenstruktur, ob für "tech_old_rank" ein Defaultwert hinterlegt worden ist oder ein Pflichtfeld ist.


Grüße,
Dani
Crimson
Crimson 25.03.2010 um 13:33:27 Uhr
Goto Top
In dem Feld "tech_old_rank" ist kein Standart Wert hinterlegt und es ist nicht NULL, ich hab zwar schon zu Testzwecken bei allen Feldern einen Standartwert hinterlegt, dennoch gibt es weiterhin massive Probleme im Programm.
Biber
Biber 25.03.2010 um 16:15:52 Uhr
Goto Top
Moin Crimson,

Zitat von @Crimson:
In dem Feld "tech_old_rank" ist kein Standart Wert hinterlegt und es ist nicht NULL, ich hab zwar schon zu Testzwecken
bei allen Feldern einen Standartwert hinterlegt, dennoch gibt es weiterhin massive Probleme im Programm.

Ich fasse nochmal zusammen:
  • das Feld "tech_old_rank" ist als INTEGER definiert
  • das Feld "tech_old_rank" ist als NOT NULL definiert
  • das Feld "tech_old_rank" hat keinen Default
--> also würde es in die Grütze gehen, wenn du einen neuen Datensatz einfügt und das Feld "tech_old_rank" nicht explizit ansprichst/einfach nicht erwähnst.

Du gehst doch aber noch einen Schritt weiter: du versuchst doch ausdrücklich, dort einen Leerstring reinzudrücken

Das heißt, selbst wenn diese merkwürdige Syntax "INSERT INTO tabelle SET `feldA` = 'valueA',,feldB = 'valueB',...;", die ich noch nie gesehen habe, funktionieren würde: jedes nicht in total zerrütteten Verhältnissen aufgewachsene Datenbanksystem würde betreten zu Boden schauen, wenn du dann mit dem Ansinnen
...`tech_old_rank` = '', ...
...um die Ecke biegst. Also einen Stringwert in ein Integerfeld reinwürgen wolltest.
Dann setzt doch dort einen numerisch-Nullwert ein.
...`tech_old_rank` = '0', ....

Wenn dieser (erstere) Aufruf bisher keinen Fehler produziert hat, dann wurde dieser INSERT noch nie aufgerufen.

Poste doch mal wie von Dani angeregt die 3 laufenden Zentimeter Sourcecode, die dieses Statement zusammentrümmern.

Grüße
Biber
Crimson
Crimson 25.03.2010 um 16:23:58 Uhr
Goto Top
Der Sourcecode ist nicht von relevanz, ich hab in meinem erstem Post geschrieben das es unter Linux und auf meinem Lapptop einwandfrei funktioniert.
In diesen beiden Systemen wird dies automatisch mit 0 gefüllt.

Nur auf dem neuen Server nicht.
Entweder der Server kann damit nicht umgehen, warum auch immer denn die anderen können es, oder es ist eine fehlkonfiguration am Server.
Biber
Biber 25.03.2010 um 16:31:19 Uhr
Goto Top
In der Fehlermeldung steht doch aber deutlich erkennbar, dass diesem Feld ein Stringwert ('') zugewiesen werden soll.
Wieso wäre es deiner Meinung nach zu erwarten, dass es "In diesen beiden Systemen .... automatisch mit 0 gefüllt." wird?

Das hieße doch, du kannst hier und heute genau dieses INSERT-Statement auf den "alten" installationen abfeuern und bekommst ohne Fehler einen neuen Satz angelegt, der auch (numerisch Null) in diesem Feld enthält?

Glaub ich nicht.
Biber
Crimson
Crimson 25.03.2010 um 16:41:30 Uhr
Goto Top
Warum ich das erwarte, ganz einfach weil es bei allen(!) Webspace Providern funktioniert hat, außer jetzt bei mir auf dem Server...
Biber
Biber 25.03.2010 um 18:06:05 Uhr
Goto Top
Na gut.... wenn dieses Verhalten deinen Erwartungen entspricht, dann setze "global.sql_mode=TRADITIONAL;" oder "global.sql_mode='';".
vgl Der SQL-Modus des Servers (mySql 5.1) --> SET sql_mode = '';

Dennoch ist mir die Herleitung deiner Erwartungshaltung vollkommen suspekt - wenn mir eine neu installierte Server-Version zu Recht einen Fehler anmeckert, der in der alten Version jahrelang nicht aufgefallen ist, dann würde ich doch sagen: "Hey, wieso war die alte Version zu dämlich, das zu merken?"
Crimson
Crimson 29.03.2010 um 20:05:31 Uhr
Goto Top
Entschuldigung für meine lange Antwortzeit, aber schon mal vielen dank für deine Hilfe.

PS: Ich werde versuchen die Fehler zu beseitigen.

LG
Crimson