我在 Firebird 3 数据库上使用带有 IBX 的 Delphi 2009(我没有选择其他技术的选择,我必须适应这种情况)。我有以下定义:
Firebird BLOB 字段定义为:
BLOB SUB_TYPE 0 SEGMENT SIZE 80
TWideMemoField 定义为:
object MainQryNOTES: TWideMemoField
FieldName = 'NOTES'
Origin = 'INVOICES.NOTES'
ProviderFlags = [pfInUpdate]
BlobType = ftWideMemo
end
测试字符串是“Цель по инфляции, %”,可以从 IBExpert 软件的 BLOB 字段中读取为:
26 04 35 04 3B 04 4C 04 20 00 3F 04 3E 04 20 00
38 04 3D 04 44 04 3B 04 4F 04 46 04 38 04 38 04
2C 00 20 00 25 00
奇怪的是,Delphi 颠倒了字节顺序,例如西里尔字符 Ц 具有 HEX UTF8 表示为 04 26,但它在数据库中存储为 26 04 并且类似的情况也与其他字符完全相同(可以使用表格的帮助https://www.w3schools.com/charsets/ref_utf_basic_latin.asp和https://www.w3schools.com/charsets/ref_utf_cyrillic.asp)。就我而言,我只有 2 个字节的字符,但我想类似的情况也会出现在 3 个和 4 个字节的 UTF8 字符上。
那么 - 我如何配置 TWideMemoField 以要求不转换 UTF8 字符串的字节顺序?