2011-09-28 23 views
0

我在customer_customer表中有30行的MySQL數據庫。其中5條記錄中有adm_name作爲Mike。LIKE查詢在將MySQL表的CHARACTER SET更改爲UTF-8後無法使用

mysql> select id from customer_customer where adm_name like '%mike%'; 
+----+ 
| id | 
+----+ 
| 1 | 
| 2 | 
| 3 | 
| 4 | 
| 5 | 
+----+ 
5 rows in set (0.00 sec) 

現在我已經改變字符集我的表爲utf8

mysql> ALTER TABLE customer_customer CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; 
Query OK, 30 rows affected (0.03 sec) 
Records: 30 Duplicates: 0 Warnings: 0 

再次,如果我跑同樣喜歡的查詢,那麼MySQL沒有返回我的任何記錄。

mysql> select id from customer_customer where adm_name like '%mike%'; 
Empty set (0.00 sec) 

我無法理解此行爲。有沒有人遇到過這種情況?我做錯了什麼?

+0

通過查看類似的帖子http://stackoverflow.com/questions/2150256/how-to-change-all-the-tables-in-my-database-to-utf8-character-set,如果我將COLLATE更改爲utf8_unicode_ci,那麼查詢工作正常。 –

+1

因爲CI意味着不區分大小寫的比較。 – Karolis

回答

0

您將排序規則更改爲二進制,在這種情況下,比較是逐字節完成的,而不是逐字符完成。這裏是BINARY operator的一個很好的例子和解釋。

mysql> SELECT 'a' = 'A'; 
     -> 1 
mysql> SELECT BINARY 'a' = 'A'; 
     -> 0