ДА, вы все правильно поняли. Это VCL и его документация, которые не работают . Ваша путаница действительно имеет смысл!
В реализации Delphi 2009+ необходимо использовать свойство AsString
для AnsiString
и AsWideString
для string=UnicodeString
.
Фактически свойства As*String
определены так:
property AsString: string read GetAsString write SetAsString;
property AsWideString: UnicodeString read GetAsWideString write SetAsWideString;
property AsAnsiString: AnsiString read GetAsAnsiString write SetAsAnsiString;
Как же мы можем узнать, что AsString
возвращает AnsiString
? Это просто не имеет никакого смысла, по сравнению с остальной частью VCL / RTL.
Реализация, использующая класс TStringField
для AnsiString
и TWideStringField
для string=UnicodeString
, не работает.
Кроме того, документация также не работает :
Data.DB.TField.AsString
Представляет значение поля в виде строки (Delphi) или AnsiString (C ++).
Это не означает string
в Delphi, но AnsiString
! Тот факт, что свойство использует простой тип string=UnicodeString
, совершенно ошибочно.
С точки зрения базы данных, драйвер БД должен обрабатывать Unicode или работать с определенной кодировкой. Но с точки зрения VCL, в Delphi 2009+ вы должны знать только о типе string
и быть уверенным, что использование AsString: String
будет готово к Unicode.