Почему мой запрос возвращает неправильный тип строки? - PullRequest
1 голос
/ 23 марта 2011

Согласно официальной документации Firebird , столбцы, содержащие строки Unicode (то, что SQL Server называет NVARCHAR), должны быть объявлены как VARCHAR(x) CHARACTER SET UNICODE_FSS.Я так и сделал, но когда я запрашиваю таблицу с помощью DBExpress, я получаю в результате TStringField, который является только AnsiString, а не TWideStringField, который я ожидал.

Как мне получить DBX, чтобы дать мнеРезультат строки Unicode из столбца строки Unicode?

1 Ответ

10 голосов
/ 23 марта 2011

В Firebird ваш единственный вариант - установить для всего подключения к базе данных набор символов Unicode, например utf8.

Таким образом, все столбцы VarChar приведут к полям типа TWideStringField.Поля всегда будут TWideStringFields, несмотря на определенный набор символов, объявленный при создании столбца.

Char set at connection level

Установка этого значения приведет к следующему:

TWideStringField

Сейчас я собираю эти изображения из примера проекта, который я создал, обучая Delphi несколько месяцев назад.Вы должны установить это свойство перед созданием любых постоянных полей, если это ваш случай.

Похоже, что драйвер не поддерживает кодировку UNICODE_FSS, так как мое первое действие было создать новый проект, установить свойство, а затемсоздать несколько полей.ИМХО, лучше объявить всю базу данных как utf8 или другую кодировку, поддерживаемую драйвером в предложении создания базы данных, а затем сопоставить кодировку базы данных в Delphi, чтобы избежать преобразования строк.

...