MySQL Vergleichsoperator, Leerzeichen

8

Wenn die Datenbankzeile wie folgt lautet: country = 'usa' und i query "select * from data where country = 'usa '" , wird auch diese Zeile zurückgegeben. Also ist es keine exakte Übereinstimmung.

Warum MySQL das tut? Und in welchen anderen Fällen wird es auch TRUE zurückgeben, wenn es nicht wirklich wahr ist?

    
user1113803 08.05.2012, 09:08
quelle

5 Antworten

4

Die nachfolgenden Leerzeichen werden weggelassen, wenn die Spalte vom Typ char oder varchar ; Die Verwendung von like 'usa ' behebt das Problem

    
Maxim Krizhanovsky 08.05.2012, 09:11
quelle
9

Wie in dem Handbuch erwähnt:

  

Alle MySQL-Sortierungen sind vom Typ PADSPACE . Dies bedeutet, dass alle CHAR und VARCHAR Werte in MySQL ohne Rücksicht auf nachfolgende Leerzeichen verglichen werden.

In der Definition des Operators LIKE heißt es:

  

Insbesondere nachgestellte Leerzeichen sind signifikant, was nicht für CHAR oder VARCHAR Vergleiche mit dem = operator:

Wie in diese Antwort erwähnt:

  

Dieses Verhalten ist in SQL-92 und SQL: 2008 angegeben. Zu Vergleichszwecken wird die kürzere Zeichenfolge auf die Länge der längeren Zeichenfolge aufgefüllt.

     

Aus dem Entwurf (8.2 & lt; Vergleichsprädikat & gt;):

     
    

Wenn die Länge in Zeichen von X nicht gleich der Länge in Zeichen von Y ist, dann wird die kürzere Zeichenfolge zu Vergleichszwecken effektiv durch eine Kopie von sich selbst ersetzt, die auf die Länge der längeren erweitert wurde Zeichenfolge durch Verkettung rechts von einem oder mehreren Pad-Zeichen, wobei das Pad-Zeichen basierend auf CS ausgewählt wird. Wenn CS die NO PAD-Eigenschaft hat, dann ist das Pad-Zeichen ein implementierungsabhängiges Zeichen, das sich von jedem Zeichen in dem Zeichensatz von X und Y unterscheidet, das weniger als irgendeine Zeichenfolge unter CS zusammenstellt. Andernfalls ist das Pad-Zeichen ein & lt; Leerzeichen & gt;.

  
     

Zusätzlich zu den anderen ausgezeichneten Lösungen:

%Vor%
    
eggyal 08.05.2012 09:16
quelle
1

probiere es mit like oder mit diesem

%Vor%     
silly 08.05.2012 09:12
quelle
0

Die nachgestellten Leerzeichen werden weggelassen, wenn die Spalte vom Typ char oder varchar,

ist

Kann mehr über den folgenden Link lesen:

Ссылка

    
Shaikh Farooque 08.05.2012 09:17
quelle
0

Das Handbuch sagt dies:

  

Alle MySQL-Kollatierungen sind vom Typ PADSPACE. Dies bedeutet, dass alle CHAR   und VARCHAR-Werte in MySQL werden ohne Rücksicht auf irgendwelche verglichen   abschließende Leerzeichen [...] Dies gilt für alle MySQL-Versionen und wird nicht vom SQL-Servermodus beeinflusst.

Ссылка

Wenn Sie Leerzeichen berücksichtigen müssen, müssen Sie die sprachsensitive Sortierung grundsätzlich umgehen. Eine einfache Möglichkeit besteht darin, eine binäre Sortierung zu erzwingen. Bitte laufen und vergleichen:

%Vor%     
Álvaro González 08.05.2012 09:19
quelle

Tags und Links