Tôi muốn so sánh hai chuỗi trong một DB SQLite mà không cần quan tâm đến dấu trọng âm và trường hợp. Tôi có nghĩa là "Événement" nên bằng "evenèment".COLLATE được bản địa hoá trên so sánh chuỗi SQLite
Trên Debian Wheezy, gói SQLite không cung cấp ICU. Vì vậy, tôi đã biên soạn gói SQLite chính thức (phiên bản 3.7.15.2 2013-01-09 11:53:05) với một mô-đun ICU. Bây giờ, tôi có hỗ trợ Unicode tốt hơn (bản gốc lower()
chỉ áp dụng cho các ký tự ASCII, giờ nó hoạt động trên các chữ cái khác). Nhưng tôi không thể quản lý để áp dụng một đối chiếu để so sánh.
SELECT icu_load_collation('fr_FR', 'FRENCH');
SELECT 'événement' COLLATE FRENCH = 'evenement';
-- 0 (should be 1)
SELECT 'Événement' COLLATE FRENCH = 'événement';
-- 0 (should be 1 if collation was case-insensitive)
SELECT lower('Événement') = 'événement';
-- 1 (at least lower() works as expected with Unicode strings)
SQLite documentation xác nhận rằng đây là cách phù hợp để áp dụng đối chiếu. Tôi nghĩ rằng documentation of this ICU extension là một chút ánh sáng (vài ví dụ, không có gì về trường hợp nhạy cảm đối với collations).
Tôi không hiểu tại sao toán tử COLLATE
không có tác dụng trong ví dụ trên của tôi. Hãy giúp tôi.