Я использую Delphi 2009 с IBX в базе данных Firebird 3 (у меня нет выбора, чтобы выбрать другие технологии, я должен адаптироваться к ситуации). У меня есть следующие определения:
BLOB-поле Firebird определяется как:
BLOB SUB_TYPE 0 SEGMENT SIZE 80
TWideMemoField определяется как:
object MainQryNOTES: TWideMemoField
FieldName = 'NOTES'
Origin = 'INVOICES.NOTES'
ProviderFlags = [pfInUpdate]
BlobType = ftWideMemo
end
Тестовая строка - «Цель по инфляции,%», и ее можно прочитать из поля BLOB в программе IBExpert как:
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?