Почему мой запрос возвращает неправильный тип строки?

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

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


person Mason Wheeler    schedule 22.03.2011    source источник
comment
Не знаю драйвер fb, но с драйвером ib (в базе данных fb) я смог работать со столбцами UTF8 с параметром ServerCharSet = UTF8 в соединении sql. Для подключения можно было работать либо с юникодом, либо с анси, то есть я не мог работать с таблицами со смешанными столбцами. Не знаю, так ли это до сих пор ..   -  person Sertac Akyuz    schedule 23.03.2011
comment
Кстати, если вы разрабатываете базу данных, не работайте с UNICODE_FSS. Первое попадание в Google для UNICODE_FSS - это this.   -  person Sertac Akyuz    schedule 23.03.2011
comment
@sertac: Хороший улов. Я создаю сценарий создания программно, поэтому могу легко это исправить. Тем не менее, проблема TWideStringField все еще не решена ...   -  person Mason Wheeler    schedule 23.03.2011
comment
связанные: stackoverflow.com/questions/2302670/   -  person mjn    schedule 24.03.2011


Ответы (1)


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

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

Набор символов на уровне подключения

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

TWideStringField

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

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

person jachguate    schedule 23.03.2011