2011-10-27 17 views
10

Tôi đang chạy các câu SELECT sau trên MySQL 5.0.88 với charset utf8 và collation utf8_unicode_ci:MySQL - Tại sao các quy tắc COLLATION bỏ qua bởi nhà điều hành NHƯ cho nhân vật ß Đức

SELECT * FROM table WHERE surname = 'abcß'; 

+----+-------------------+------+ 
| id | forename | surname | 
+----+-------------------+------+ 
| 1 | a   | abcß  | 
| 2 | b   | abcss  | 
+----+-------------+------------+ 

SELECT * FROM table WHERE surname LIKE 'abcß'; 

+----+-------------------+------+ 
| id | forename | surname | 
+----+-------------------+------+ 
| 1 | a   | abcß  | 
+----+-------------+------------+ 

Theo http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html đặc biệt của Đức char ß = ss cho utf8_unicode_ci, nhưng tại sao nó chỉ hoạt động với toán tử "=" chứ không phải với LIKE? Tôi có một ứng dụng danh bạ điện thoại và tôi rất cần cả hai thứ làm việc cùng nhau.

+0

gì không hiển thị các biến như '% collation%' 'và' hiển thị các trường đầy đủ từ chương trình 'có thể hiển thị của bạn? Sự đối chiếu phải giống hệt nhau trong suốt. –

+0

collation cho tất cả các lĩnh vực varchar của bảng được thiết lập để "utf8_unicode_ci" + một số lĩnh vực int không có collation ở tất cả. – sub

+2

+1 câu hỏi rất thú vị, thích nghe câu trả lời. – Johan

Trả lời

9

mỗi tiêu chuẩn SQL, LIKE độ hoạt động phù hợp trên một cơ sở cho mỗi nhân vật, do đó nó có thể tạo ra kết quả khác nhau từ các nhà điều hành = so sánh:

mysql> SELECT 'ä' LIKE 'ae' COLLATE latin1_german2_ci; 
+-----------------------------------------+ 
| 'ä' LIKE 'ae' COLLATE latin1_german2_ci | 
+-----------------------------------------+ 
|          0 | 
+-----------------------------------------+ 
mysql> SELECT 'ä' = 'ae' COLLATE latin1_german2_ci; 
+--------------------------------------+ 
| 'ä' = 'ae' COLLATE latin1_german2_ci | 
+--------------------------------------+ 
|         1 | 
+--------------------------------------+ 

Nguồn: http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like

+1

Cảm ơn Karolis. Dường như tôi không thể có cả hai, mà loại sucks cho một ứng dụng cuốn sách điện thoại lớn với rất nhiều ký tự đặc biệt. Có lẽ tìm kiếm mysql FULLTEXT có thể là một thay thế. – sub