Kann mir einer den Unterschied zwischen Datenbank Spalten Typ und SQL Statement Type erklären? Am besten ganz von vorne, weil mir da einiges schleierhaft vorkommt.
Wieso liefern SQL Abfragen immer nur Strings, selbst wenn in der Datenbank der Typ int() oder double() angegeben ist?
Ich habe eine table column von varchar() zu double() umgewandelt, per PHP. Vorher hatte ich den Typ der column auf double(8,5) umgestellt. Beim SQL UPDATE habe ich doubleval() verwendet.
Da bei SQL SELECT immer nur ein String geliefert wird [warum, das wüßte ich gern], habe ich auf CAST() erweitert. Das ist ein Thema für sich, weil, da gibt es unzählige Anleitungen, die irgendwie nichtssagend sind und nicht funktionieren. Am unnützesten sind die, bei denen Zahlen anstatt columnnames verwendet werden, like CAST('123.9383' as double(8,5)). Die Zahl gegen columnname austauschen funktioniert nicht, sondern es funktioniert nur mit einem weiteren AS: CAST(column as double(8,5)) AS column, zumindest bei mir. Der Witz an der ganze Sache ist, es bleibt beim String...
Wer kann mir das erklären? Ist das ähnlich wie bei $_POST; wo auch immer nur ein String empfangen wird. Wobei, das stimmt nicht ganz. Die Keys bei einem $_POST als array sind integer. Das liegt wohl an der unsichtbaren Verarbeitung nach Empfang durch PHP.
Wieso liefern SQL Abfragen immer nur Strings, selbst wenn in der Datenbank der Typ int() oder double() angegeben ist?
Ich habe eine table column von varchar() zu double() umgewandelt, per PHP. Vorher hatte ich den Typ der column auf double(8,5) umgestellt. Beim SQL UPDATE habe ich doubleval() verwendet.
Da bei SQL SELECT immer nur ein String geliefert wird [warum, das wüßte ich gern], habe ich auf CAST() erweitert. Das ist ein Thema für sich, weil, da gibt es unzählige Anleitungen, die irgendwie nichtssagend sind und nicht funktionieren. Am unnützesten sind die, bei denen Zahlen anstatt columnnames verwendet werden, like CAST('123.9383' as double(8,5)). Die Zahl gegen columnname austauschen funktioniert nicht, sondern es funktioniert nur mit einem weiteren AS: CAST(column as double(8,5)) AS column, zumindest bei mir. Der Witz an der ganze Sache ist, es bleibt beim String...
Code:
array(3) { ["id"]=> string(1) "1" ["gpslat"]=> string(8) "49.36578" ["gpslon"]=> string(8) "11.95247" }
Kommentar