アクセントと大文字小文字を区別せずにSQLite DBの2つの文字列を比較したいと思います。私は "Événement"が "evenement"に等しいはずであることを意味します。SQLite文字列比較のローカライズされたCOLLATE
Debian Wheezyでは、SQLiteパッケージはICUを提供しません。そこで私は公式のSQLiteパッケージ(バージョン3.7.15.2 2013-01-09 11:53:05)をコンパイルし、ICUモジュールを含んでいます。さて、私はより良いUnicodeサポートを持っています(元のlower()
はASCII文字にのみ適用され、今は他の文字でも機能します)。しかし、比較に照合を適用することはできません。
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は、これが照合を適用する正しい方法であることを確認します。私はdocumentation of this ICU extensionが少し明るいと思っています(いくつかの例では、照合の大文字と小文字の区別はありません)。
COLLATE
演算子が上記の例で効果がない理由を理解できません。助けてください。