德尔福XE,火鸟和UTF8(Delphi XE, Firebird and UTF8)

2019-09-17 18:15发布

我升级D7程序XE,与Delphi 7下我有这样的代码...

ParamByName( 'Somefield')AsString:= someutf8rawbytestring;

如果下包含someutf8rawbytestring Unicode字符,例如西里尔字母XE,那么它们将显示为???? 在DB。

我看到someutf8rawbytestring为8个字符长,为我的4字符串,这是正确的。 但在DB目前只有四个大字。

我使用火鸟2通过TIBQuery与XE和更新与字符类型“NONE”一个VARCHAR字段。

那么它是什么样子是被检测的UTF8并以某种方式转换回Unicode数据点,然后是失败的DB串转换。 我已经试过varchar字段设置为UTF8编码,但具有相同的结果。

那么我们应该如何来处理呢?

编辑:我可以使用数据库工具和编辑我的数据库字段,让一些非ASCII数据,当我读回它作为一个UTF8编码的字符串,我可以用UTF8decode,它是正确的。 但写数据回到这个领域似乎是不可能没有得到一堆???? 在DB。 我试过ParamByName( 'Somefield')AsString:= somewidestring; 和ParamByName( 'Somefield')AsWideString:= somewidestring; 我刚刚得到的DB垃圾...

EDIT2:下面的代码(在一个迭代)...



procedure TFormnameEdit.savename(id : integer);
begin
    With DataModule.UpdateNameQuery do begin
        ParamByName ('Name').AsString:=UTF8Encode(NameEdit.Text);
        ParamByName ('ID').AsInteger:=id;
        ExecSQL;
        Transaction.Commit;
    end;
end;

Answer 1:

作为@Lightbulb建议,加入LC_CTYPE = UTF8到TIBDatabase PARAMS解决了这个问题。



文章来源: Delphi XE, Firebird and UTF8