2010-04-05 7 views
9

Verzeihen Sie meine Newbie Frage, aber warum das Finden von '2' oder '2' in Mysql den gleichen Datensatz zurückgibt?Hmm, warum die Suche nach "2" oder "2" den gleichen Datensatz zurückgibt?

Zum Beispiel:

sagen, dass ich einen Datensatz mit String-Feld mit dem Namen ‚Slug‘, und der Wert ‚2‘. Und die folgenden SQLs geben denselben Datensatz zurück.

SELECT * From articles WHERE slug='2' 
SELECT * From articles WHERE slug='2' 
+0

+1 Was das zweite 2-Zeichen ist, sowieso? :) –

+1

@ Jørn U + FF12 FULLWIDTH DIGIT TWO. –

Antwort

13

Es hat mit der Zusammenstellung Ihrer Datenbank zu tun:

mysql> SHOW VARIABLES LIKE 'collation_%'; 
+----------------------+-------------------+ 
| Variable_name  | Value    | 
+----------------------+-------------------+ 
| collation_connection | latin1_swedish_ci | 
| collation_database | latin1_swedish_ci | 
| collation_server  | latin1_swedish_ci | 
+----------------------+-------------------+ 
3 rows in set (0.00 sec) 

mysql> SELECT '2'='2'; 
+-----------+ 
| '2'='2' | 
+-----------+ 
|   0 | 
+-----------+ 
1 row in set (0.00 sec) 

mysql> SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> SELECT '2'='2'; 
+-----------+ 
| '2'='2' | 
+-----------+ 
|   1 | 
+-----------+ 
1 row in set (0.00 sec) 
+0

Siehe: http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html –

+0

Das ist wirklich hilfreich, danke :) – Shaoshing

0

sie sollten nicht die gleiche Zeile auf Gleichheit zurück, aber wenn Sie verwenden like Sie sind wahrscheinlich die gleiche Reihe zu bekommen. mit like mysql wird Fuzzy-Matching verwenden, so 2 und 2 werden die gleichen (afer alle sie sind beide eine Form von 2, nicht wahr?)

+0

Yup, mysql hat den gleichen Datensatz zurückgegeben, wie die Antwort beschrieben, dies ist mit der Sortierung verbunden. – Shaoshing

0

Was ist der Datentyp von Slug? Ich denke, es ist numerisch. Wenn dies der Fall ist, wird es von mysql in int umgewandelt, und jede Art von '2' oder '2' wird zu 2. Dies wird nicht mit String-Datentypen passieren.

+0

Schnecken sind immer Text. –