Страница 1 из 1

Unicode

Добавлено: Пт 06 дек 2013 10:32
marcodor
Добрый день,

Как быть если в базе есть юникодовые поля и неюникодовые?
Например имеем поля
FULL_NAME: VARCHAR(25) CHARACTER SET UTF8
IDCD_SERIE: VARCHAR(2) CHARACTER SET ASCII или NONE
Тоесть для имя я хочу чтоб создалось TWideStringField а для серию пасспорта TStringField чтоб пользователь смог вводить только ASCII символы.

Если ставим IBCConnection.UseUnicode то IBDAC создает ВСЕ char/varchar поля как TWideStringField что думаю неправильно. Это отражается и на производительность.

Логично если чарсет у поля/домэйна юникодовое то создать TWideStringField в независимости установлен ли флаг UseUnicode или нет. UseUnicode должен иметь значение если чарсет NONE, здесь можно пихать и юникод стринг.

Спасибо!

Re: Unicode

Добавлено: Пт 06 дек 2013 12:23
AndreyZ
Здравствуйте,

Для решения проблемы Вам следует установить опцию UseUnicode в False и использовать Data Type Mapping. Например:

Код: Выделить всё

IBCQuery1.DataTypeMap.AddFieldNameRule('FULL_NAME', ftWideString);
IBCQuery1.Open;
При этом, для поля FULL_NAME будет создан TWideStringField, а для поля IDCD_SERIE - TStringField.
Более подробную информацию о Data Type Mapping Вы можете найти в статье "Data Type Mapping" документации IBDAC.

Re: Unicode

Добавлено: Пт 06 дек 2013 13:25
marcodor
Так если бы было дело только в FULL_NAME дело, можно дата маппигом пользоватся. А когда куча (>100) датасетов не очень получается мапить неделю. Я как пример выдал.

Почему же не создать сразу TWideStringField если поле в базе по определению юникодовое? Логично же...

Re: Unicode

Добавлено: Пн 09 дек 2013 10:30
AndreyZ
Мы рассмотрим возможность добавления мапинга полей по типу с указанием кодировки в одной из следующих версий. Например:

Код: Выделить всё

IBCConnection.DataTypeMap.AddDBTypeRule(ibcVarchar, ftWideString, 'UTF8');
IBCConnection.DataTypeMap.AddDBTypeRule(ibcVarchar, ftString, 'ASCII');

Re: Unicode

Добавлено: Пн 09 дек 2013 11:30
marcodor
Андрей, спасибо, это будет супер!

Re: Unicode

Добавлено: Пн 09 дек 2013 17:56
AndreyZ
Пожалуйста, мы сообщим Вам когда данная функциональность будет добавлена в IBDAC.