2010-03-05 31 views
11

Tôi đang cố gắng để đạt được phân loại giọng và phân biệt chữ hoa chữ thường trong MySQL. Theo các hướng dẫn trong sách hướng dẫn, điều này có nghĩa là phải làm việc với bộ ký tự utf8 và đối chiếu utf8_general_ci.Phân loại không nhạy cảm trong MySQL

Khi tôi làm theo tấm gương trong cuốn hướng dẫn (http://dev.mysql.com/doc/refman/5.1/en/charset-collation-implementations.html) dưới "Collations cho ký tự Unicode đa byte bộ" Tôi không nhận được kết quả tương tự:

Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 679877 
Server version: 5.1.41-log MySQL Community Server (GPL) by Remi 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 

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

mysql> SELECT 'a' = 'A', 'a' = 'À', 'a' = 'á'; 
+-----------+-----------+-----------+ 
| 'a' = 'A' | 'a' = 'À' | 'a' = 'á' | 
+-----------+-----------+-----------+ 
|   1 |   0 |   0 | 
+-----------+-----------+-----------+ 
1 row in set (0.00 sec) 

mysql> 

Trong ví dụ trong cuốn hướng dẫn, đó là tất cả 1.

Nó cũng không xử lý các ký tự có dấu như nhau khi tôi cố gắng đặt collation trực tiếp trong truy vấn. Trong ví dụ này, bảng đang sử dụng latin1 và tôi đang chuyển đổi thành utf8.

mysql> select * from test; 
+----------+ 
| k  | 
+----------+ 
| Cárdenas | 
| Cardozo | 
| Corbin | 
| Cabrero | 
+----------+ 

mysql> select k from test order by convert(k using utf8) collate utf8_general_ci 
; 
+----------+ 
| k  | 
+----------+ 
| Cabrero | 
| Cardozo | 
| Corbin | 
| Cárdenas | 
+----------+ 
4 rows in set (0.00 sec) 

Nên bỏ qua dấu 'a' trong mục nhập cuối cùng và sắp xếp thứ hai. Bất kỳ ý tưởng những gì tôi đang làm sai?

+0

bạn vui lòng thêm vào câu hỏi của bạn đầu ra từ 'hiển thị các cột ĐẦY ĐỦ TỪ kiểm tra;' –

+1

tôi nhận được tất cả 1 cho chọn, vì vậy phải có một cái gì đó sai với collations của bạn trong MySQL. –

+1

Bàn điều khiển có phải bạn đang nhập tất cả các kiểm tra này được định cấu hình để xử lý đầu vào bàn phím như UTF-8 không? –

Trả lời

0

Tôi có thể thiếu thứ gì đó ở đây ... nhưng bạn không thể chỉ thực hiện một hàm (nói removeAccents) lấy một chuỗi và trả về chuỗi tương đương không có dấu và sau đó sắp xếp theo removeAccents(field). Tôi tin rằng bạn có thể tạo chỉ mục cho điều đó, điều này sẽ giúp ích cho hiệu suất.

2

Nó hoạt động trên cài đặt MySQL mặc định của tôi. Vì bạn chưa cung cấp SHOW FULL COLUMNS từ bài kiểm tra (nhận xét @fsb), vẫn có thể việc đối chiếu trong cấu trúc bảng của bạn không chính xác.

  • Có phải tập hợp cột 'k' được đặt thành một thứ khác ngoài utf8_general_ci không?

  • Kiểm tra xem CHỌN k từ Names ORDER BY k ASC là đưa ra các câu trả lời đúng

  • đã MySQL tập tin cài đặt index.xml được sửa đổi để thay đổi ý nghĩa của utf8_general_ci?

phần có liên quan về cài đặt mẫu để so sánh:

<charset name="utf8"> 
    <family>Unicode</family> 
    <description>UTF-8 Unicode</description> 
    <alias>utf-8</alias> 
    <collation name="utf8_general_ci" id="33"> 
    <flag>primary</flag> 
    <flag>compiled</flag> 
    </collation> 
    <collation name="utf8_bin" id="83"> 
    <flag>binary</flag> 
    <flag>compiled</flag> 
    </collation> 
</charset> 
  • đã mã biên soạn được sửa đổi để thay đổi ý nghĩa của utf8_general_ci?

Có thể hình dung ai đó đã tinh chỉnh một trong những điều này đối với một số mục đích bất chính ...

Các vấn đề liên quan