Christopher Reimann: Mysql String Vergleich

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' */  

  1. 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 FROM product WHERE style_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
    
    1. echo $begrüßung;

      SELECT id,name FROM product WHERE style\_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";