mysql max() bei varchar Feldern

Sprint

Erfahrenes Mitglied
Hallo zusammen,

ich bin heute auf ein merkwürdiges Verhalten des Maximalwertes gestoßen, das ich so nicht kapiere.

Ich habe in einer Tabelle ein varchar Feld, in dem nur numerische Werte gespeichert werden. Den größten Wert davon mit max() herauszufinden funktioniert so lange, wie alle Werte die selbe Anzahl Stellen haben. In einem Bereiche von z.B. 1000 - 7389 wird korrekt die 7389 ausgegeben. Sobald aber die 10000 dazukommt, wird als max() Wert 9999 ausgegeben.

Zwar kann ich das Feld problemlos auf int umstellen, mich würde aber trotzdem interessieren, warum sich max() so verhält.
 
max() nimmt den grössten Wert. VARCHAR ist ein Text. Der textvergleich geht von Vorne nach Hinten. Egal wo viele Zeichen kommen.
Und da ist halt 9 grösser als 1.
Stell due das ganze mit Nuchstaben vor. Das willst du Achen auch vor Dortmund sehen, obwohl Dortmund mehr Zeichen besitzt.

Ersetze den Datentyp in ein SMALLINT oder in INT. Je nachdem wie gross die Zahl noch werden kann.

Oder du castest es beim Auswerten, Ist aber nicht schön und sollte nur verwednet werden, wenn du aus Betrieblichen Gründen den Spaltentyp nicht anpassen kannst.
SQL:
max(cast(meinFeld as signed))
 
Ok, dann habe ich das auch kapiert. Ist ja auch irgendwie logisch. Nur hatte ich gedacht, daß rein numerische Werte erkannt und umgewandelt würden.

Danke auch für den Tip mit cast(). Bin mir noch nicht sicher, ob ich den Typ wirklich ändern kann. Muß das erst nochmal genauer analysieren. Aber zumindest läuft es so dann auch.
 
Zurück