2010-04-05 13 views
9

wybacz moje pytanie dla początkujących, ale dlaczego znalezienie przez "2" lub "2" w Mysql zwraca ten sam rekord?Hmm, dlaczego znalezienie przez "2" lub "2" zwraca ten sam rekord?

Na przykład:

Say mam rekord z polem ciąg o nazwie „ślimak”, a wartością jest „2”. Następujące SQL zwraca ten sam rekord.

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

+1 Co to za drugim 2 charakteru, tak? :) –

+1

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

Odpowiedz

13

Ma do czynienia z gromadzeniem bazy danych:

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

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

+0

To bardzo pomocne, dzięki :) – Shaoshing

0

nie powinny one powrócić tego samego wiersza dla równości, ale jeśli używasz like jesteś prawdopodobnie otrzymuję ten sam wiersz. przy użyciu like mysql użyje dopasowania rozmytego, więc 2 i 2 będą takie same (po tym, że oba są formą 2, czyż nie?)

+0

Yup, mysql zwrócił ten sam rekord, jak opisana odpowiedź, jest to związane z sortowaniem. – Shaoshing

0

Jaki jest typ pocisku? myślę, że jest to numeryczna. Jeśli tak, to tutaj mysql przesyła ją do int, a wszelkie sposoby "2" lub "2" staną się 2. To się stanie z typami ciągów.

+0

Ślimaki są zawsze tekstem. –