Christian Kruse: MySQL-Bug? Uppercase-String ist FALSE ?

Beitrag lesen

Hallo Froschpopo,

Vielleicht bin ich aber auch noch nicht auf das richtige Recherche-Keyword gestoßen.

Die richtigen Keywords wären type conversion rules mysql gewesen ;-)

Testfeld VARCHAR(100) NULL

Testfeld: USUSSHDGIASGDAGDA

Hier nun eine Abfrage: SELECT Testfeld FROM Tabelle WHERE Testfeld = False

Ergebnis: USUSSHDGIASGDAGDA

Hehe, ja, MySQL mal wieder.

Das funktioniert nur mit Großbuchstaben.

Nein, das geht auch mit Kleinbuchstaben:

MariaDB [test]> select 'a' = false;
+-------------+
| 'a' = false |
+-------------+
|           1 |
+-------------+
1 row in set, 1 warning (0.00 sec)

WARUM?

Der Grund liegt in diesem Satz auf der Conversion Rules-Seite:

In all other cases, the arguments are compared as floating-point (real) numbers.

Keiner der vorher erwähnten Fälle trifft zu, also konvertiert MySQL alles nach Real und vergleicht dann. Und das ist:

MariaDB [test]> select cast('USUSSHDGIASGDAGDA' as double);
+-------------------------------------+
| cast('USUSSHDGIASGDAGDA' as double) |
+-------------------------------------+
|                                   0 |
+-------------------------------------+
1 row in set, 1 warning (0.00 sec)

MariaDB [test]> select cast(false as double);
+-----------------------+
| cast(false as double) |
+-----------------------+
|                     0 |
+-----------------------+
1 row in set (0.00 sec)

Du hast dort also effektiv WHERE 0 = 0 stehen. Und ja, das ist bescheuert.

LG,
CK