Использование UNICODE_FSS

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
fsharykin
Сообщения: 8
Зарегистрирован: 26 окт 2004, 11:26

Использование UNICODE_FSS

Сообщение fsharykin » 26 окт 2004, 11:39

Если у меня, например, определено в таблице поле типа varchar(10) в кодировке UNICODE_FSS и я передаю его в качестве параметра в хранимую процедуру, то в хранимой процедуре я должен описать параметр как varchar(10) или как varchar(30)?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 26 окт 2004, 11:43

вообще как varchar(30), но ... дело в том, что полноценно с юникодом можно работать только если

1. работа идет с ibx/fibplus/ibapi и все строки вручную переводятся в юникод туда и обратно
2. работа идет через EasySoft ODBC (unicode-вариант) или IBProvider (www.ibprovider.com/rus).

См. http://www.ibase.ru/devinfo/ib_unicode.htm

fsharykin
Сообщения: 8
Зарегистрирован: 26 окт 2004, 11:26

Сообщение fsharykin » 26 окт 2004, 12:15

Я работаю на С#(VS2003), CУБД FireBird 1.5 через FirebirdNETProvider 1.7, так что проблем с перекодировкой нет вообще. Странно, что до сего момента я не умножал на три длины строк в параметра SP и все вроде бы работало (сомнения заронил IbExpert когда генерил тект SP c умножением на три). Теперь наверное надо будет умножать на три.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 26 окт 2004, 12:24

да, про юникод и кол-во символов написано в DataDef.pdf.

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Re: Использование UNICODE_FSS

Сообщение dimitr » 26 окт 2004, 17:09

fsharykin писал(а):Если у меня, например, определено в таблице поле типа varchar(10) в кодировке UNICODE_FSS и я передаю его в качестве параметра в хранимую процедуру, то в хранимой процедуре я должен описать параметр как varchar(10) или как varchar(30)?
Если у тебя база в unicode_fss, то надо описывать как varchar(10), иначе как varchar(10) character set unicode_fss. Никаких varchar(30) быть не должно.

Ответить