Tôi có một bảng với một lĩnh vực một sử dụng mã hóa utf8 và collation utf8_unicode_ci:Trường hợp độc đáo nhạy cảm và phân biệt dạng chữ tìm kiếm
CREATE TABLE dictionary (
a varchar(128) NOT NULL
) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Các utf8_unicode_ci chiếu là cần thiết cho một hiệu quả case insensitive tìm kiếm với phần mở rộng và thắt ống. Với mục đích này tôi có chỉ số:
CREATE INDEX a_idx on dictionary(a);
Vấn đề: Ngoài ra tôi phải đảm bảo rằng tất cả các giá trị được lưu trữ trong những lĩnh vực một là duy nhất nhưng trong một trường hợp nhạy cảm cách. Ví dụ của Đức: "blühen" và "Blühen" cả hai đều phải được lưu trữ trong bảng. Nhưng thêm "Blühen" lần thứ hai là không thể.
Có chức năng tích hợp trong MySQL để có cả hai không?
Rất tiếc, có vẻ như không thể đặt collation cho chỉ mục trong MySQL 5.1.
Các giải pháp cho vấn đề này bao gồm kiểm tra tính duy nhất trước khi chèn hoặc kích hoạt. Cả hai đều kém thanh lịch hơn so với sử dụng một chỉ mục duy nhất.
Thật không may, MySQL thiếu các tính năng như chỉ số/lượt xem vật hoá hoặc cột được tính toán hoặc chỉ mục dựa trên chức năng mà RDBMS khác có. Tôi muốn được quan tâm để xem làm thế nào nó được thực hiện tất nhiên ... – gbn
Sẽ thêm một cột với một trường hợp nhạy cảm collation và uniquness ràng buộc làm việc cho bạn? –
Tôi nghĩ rằng chủ đề này là một trợ giúp tốt. http://stackoverflow.com/questions/4945349/mysql-search-with-uft8-general-ci-is-case-sensitive-for-fulltext – MahanGM