Mysql String Vergleich
Christopher Reimann
- datenbank
3 Vinzenz Mai2 dedlfix
Hi!
Ich habe ein komisches Phaenomen bei MySql entdeckt. Gegeben ist eine varchar-Spalte und ein String in WHERE Abfrage. Der String ist NICHT in der Datenbank vorhanden (ein Leerzeichen hängt am Ende hintendran). Führe ich den Query aus, findet Mysql DENNOCH (trotz Nichtvorhandensein) die Zeile.
SELECT `id`,`name` FROM `product` WHERE `style_code`='ckj1074-p ' /* returns 1 row - but SHOULD NOT, only 'ckj1074-p' */
Hallo Christopher,
Gegeben ist eine varchar-Spalte und ein String in WHERE Abfrage. Der String ist NICHT in der Datenbank vorhanden (ein Leerzeichen hängt am Ende hintendran). Führe ich den Query aus, findet Mysql DENNOCH (trotz Nichtvorhandensein) die Zeile.
SELECT
id
,name
FROMproduct
WHEREstyle_code
='ckj1074-p ' /* returns 1 row - but SHOULD NOT, only 'ckj1074-p' */
[works as designed](http://dev.mysql.com/doc/refman/5.0/en/char.html), ich zitiere aus dem verlinkten Handbuchabschnitt:
"All MySQL collations are of type PADSPACE. This means that all CHAR and
VARCHAR values in MySQL are compared without regard to any trailing spaces."
Freundliche Grüße
Vinzenz
echo $begrüßung;
SELECT
id
,name
FROMproduct
WHEREstyle\_code
='ckj1074-p ' /* returns 1 row - but SHOULD NOT, only 'ckj1074-p' */
works as designed, ich zitiere aus dem verlinkten Handbuchabschnitt:
Dazu noch zwei Lösungsvorschläge: BINARY/VARBINARY statt CHAR/VARCHAR als Spaltentyp verwenden oder in der Query das Schlüsselwort BINARY vor den String setzen.
echo "$verabschiedung $name";