大文字と小文字を区別せず、データベースでアクセントなしの検索を行うために、照合を作成したいと考えています。
ここに私のコードがあります:
static int sqlite3NoCaseNoAccentCollate(void * foo, int ll, const void *l, int rl,
const void *r){
NSLog(@"comparing");
NSString *left = [NSString stringWithCharacters:l length:ll];
NSString *right = [NSString stringWithCharacters:r length:rl];
NSComparisonResult rs = [left compare:right options:NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch|NSForcedOrderingSearch];
NSLog("%d",rs);
return rs;
}
sqlite3 *db;
if (SQLITE_OK==sqlite3_open([pathToDataBase UTF8String], &db)){
sqlite3_create_collation(db, "MYNOCASENOACCENT", SQLITE_UTF8, NULL, &sqlite3NoCaseNoAccentCollate);
}
このクエリを実行すると:
SELECT ('teste' LIKE 'testé' COLLATE MYNOCASENOACCENT)
1 ではなく 0 を返し、カスタム関数が呼び出されることはありません (関数にブレークポイントを設定してテストします)。
「PRAGMA collation_list」を使用してすべての照合を一覧表示すると、カスタム照合が存在します。
問題のアイデアはありますか?