我升级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;