2010-04-05 12 views
9

perdona la mia domanda per principianti, ma perché trovare in "2" o "2" in Mysql restituisce lo stesso record?Hmm, perché la ricerca di "2" o "2" restituisce lo stesso record?

Ad esempio:

Dice che ho un record con il campo di stringa denominata 'lumaca', e il valore è '2'. E i seguenti SQL restituiscono lo stesso record.

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

+1 cosa è quel secondo 2 carattere, in ogni caso? :) –

+1

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

risposta

13

Ha a che fare con le regole di confronto del database:

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

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

+0

Questo è davvero utile, grazie :) – Shaoshing

0

non tornare sulla stessa riga per l'uguaglianza, ma se si utilizza like voi probabilmente ottenere la stessa riga. usando like mysql userà la corrispondenza fuzzy, quindi 2 e 2 saranno uguali (dopo tutto sono entrambi una forma di 2, non è vero?)

+0

Yup, mysql ha restituito lo stesso record, poiché la risposta descritta è correlata alle regole di confronto. – Shaoshing

0

Qual è il tipo di dati di slug? penso che sia numerico. Se è così, mysql lo trasmette a int, e ogni modo '2' o '2' diventerà 2. Questo non succederà con i tipi di dati stringa.

+0

Gli slug sono sempre di testo. –

Problemi correlati