2

この質問がこのサイトで尋ねられたことは知っていますが、すべての回答で問題が解決したわけではありません。だから私はここで私の問題をもう一度尋ねます。

(Firefox Sqlite マネージャー ツールを使用して) sqlite db を作成し、データはベトナム語で保存されます。

CREATE TABLE "customer" ("cus_id" TEXT, "cus_name" TEXT, "cus_address" TEXT, "cus_phone" TEXT);

INSERT INTO "customer" VALUES('KH1','Trần Văn A','Hai Bà Trưng, quận 1','0908112233');
INSERT INTO "customer" VALUES('KH2','Lê Hoài B','Hai Bà Trưng, quận 1','0908112233');
INSERT INTO "customer" VALUES('KH3','Nguyễn Thành C','Hai Bà Trưng, quận 1','0908112233');

そして私のアプリはiOSアプリです。ユーザー検索テキスト「Tran」クエリを試しました:

SELECT * FROM customer WHERE cus_name LIKE '%Tran%';

別の解決策を試しました:

SELECT * FROM customer WHERE cus_name COLLATE UTF8CI LIKE '%Tran%';

しかし、私は0レコードを得ました。そして、インターネットで見つけたソリューションをさらに試しましたが、レコードも0でした。

助けてください。ありがとうございました。

4

1 に答える 1

3

Unicode 以外のベトナム語の値用に、データベース テーブルにもう 1 つのフィールドを作成する必要があります。そして、このフィールドで検索します。

ベトナム文字列の記号を削除するには:

#define specialCharacter @[@"áàạảãâấầậẩẫăắằặẳẵ",@"ÁÀẠẢÃÂẤẦẬẨẪĂẮẰẶẲẴ",@"éèẹẻẽêếềệểễ",@"ÉÈẸẺẼÊẾỀỆỂỄ",@"óòọỏõôốồộổỗơớờợởỡ",@"ÓÒỌỎÕÔỐỒỘỔỖƠỚỜỢỞỠ",@"úùụủũưứừựửữ",@"ÚÙỤỦŨƯỨỪỰỬỮ",@"íìịỉĩ",@"ÍÌỊỈĨ",@"đ",@"Đ",@"ýỳỵỷỹ",@"ÝỲỴỶỸ"];
#define replaceCharacter @"aAeEoOuUiIdDyY";

    +(NSString *)removeSign4VietnameseString : (NSString*)str
    {
        NSString *tempStr = str;
        //
        NSArray * _vietNameCharacter = specialCharacter;
        NSString * _replaceCharacter = replaceCharacter;
        for (int i = 0; i<_vietNameCharacter.count; i++) {
            NSString* cRe = [NSString stringWithFormat:@"%C",[_replaceCharacter characterAtIndex:i]];
            for (int j = 0; j<[[_vietNameCharacter objectAtIndex:i] length]; j++) {
                NSString* cOri = [NSString stringWithFormat:@"%C",[[_vietNameCharacter objectAtIndex:i] characterAtIndex:j]];
                tempStr = [tempStr stringByReplacingOccurrencesOfString:cOri withString:cRe];
            }
        }
        return [tempStr lowercaseString];
    }
于 2015-10-29T07:03:30.907 に答える