Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / размерность поля таблицы для базы созданной в 1208 кодировке / 7 сообщений из 7, страница 1 из 1
02.03.2007, 16:55
    #34367614
Alexander Mushnikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
размерность поля таблицы для базы созданной в 1208 кодировке
Hi уважаемый all.

есть поле в таблице, тип: varchar(255). (база в UTF-8, т.е. 1208).
эксперементируя в своем приложении с длиной UTF-8 строки, обнаружил, что в английской раскладке я могу записать туда все 255 символов, а в русской только 64!!!
я ожидал что смогу вписать туда 128 символов (при русской раскладке).
Приложение это писано на BCB6, используется OLE provider (IBMDADB2). коннект к базе по tcp/ip.

почему 64 а не 128???
...
Рейтинг: 0 / 0
02.03.2007, 17:21
    #34367721
размерность поля таблицы для базы созданной в 1208 кодировке
Alexander MushnikovHi уважаемый all.

есть поле в таблице, тип: varchar(255). (база в UTF-8, т.е. 1208).
эксперементируя в своем приложении с длиной UTF-8 строки, обнаружил, что в английской раскладке я могу записать туда все 255 символов, а в русской только 64!!!
я ожидал что смогу вписать туда 128 символов (при русской раскладке).
Приложение это писано на BCB6, используется OLE provider (IBMDADB2). коннект к базе по tcp/ip.

почему 64 а не 128???

Потому, что размер поля задается в байтах, а не в UTF символах, а один символ в UTF-8 может занимать разное количество байт. Поэтому в UTF-кодировке размер поля нужно задавать с запасом.
...
Рейтинг: 0 / 0
02.03.2007, 18:58
    #34368086
Alexander Mushnikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
размерность поля таблицы для базы созданной в 1208 кодировке
Евгений Хабаров
Потому, что размер поля задается в байтах, а не в UTF символах, а один символ в UTF-8 может занимать разное количество байт. Поэтому в UTF-кодировке размер поля нужно задавать с запасом.

это как раз понятно. вопрос в том, что под русские символы - на 1 символ должно затрачиваться 2 байта, а не 4. тут может быть такое дело - возможно при создании базы надо было какие-то дополнительные параметры указывать, которые влияют на это...
еще один момент: в этом поле этой таблицы (в других записях) могут быть кроме руских символов еще и греческие, турецкие, и т.д. НО! японских - нет. если-бы были японские, я-бы мог предположить что именно из-за этого, т.к. для японских надо как-раз 4 байта.
...
Рейтинг: 0 / 0
05.03.2007, 11:09
    #34370648
размерность поля таблицы для базы созданной в 1208 кодировке
Alexander Mushnikov
это как раз понятно. вопрос в том, что под русские символы - на 1 символ должно затрачиваться 2 байта, а не 4. тут может быть такое дело - возможно при создании базы надо было какие-то дополнительные параметры указывать, которые влияют на это...
еще один момент: в этом поле этой таблицы (в других записях) могут быть кроме руских символов еще и греческие, турецкие, и т.д. НО! японских - нет. если-бы были японские, я-бы мог предположить что именно из-за этого, т.к. для японских надо как-раз 4 байта.

Еще раз, описание CHAR(N) или VARCHAR(N) задает длину поля в N-байт, а не UTF-символов.
Т.к. в UTF-базе могут хранится символы любых кодировок, то DB2 сама по себе не может "закладываться", что там будет храниться исключительно русский текст. Это может знать разработчик базы. Поэтому при создании UTF-8 таблицы нужно указать достаточную длину поля.
Т.е. если в столбце должно быть 10 русских символов, то нужно описать ее как CHAR(20).
Может конечно можно иначе, но не попадалось пока ни в документации ни в форумах.
...
Рейтинг: 0 / 0
05.03.2007, 12:35
    #34370997
Alexander Mushnikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
размерность поля таблицы для базы созданной в 1208 кодировке
Евгений Хабаров
Еще раз, описание CHAR(N) или VARCHAR(N) задает длину поля в N-байт, а не UTF-символов.
Т.к. в UTF-базе могут хранится символы любых кодировок, то DB2 сама по себе не может "закладываться", что там будет храниться исключительно русский текст. Это может знать разработчик базы. Поэтому при создании UTF-8 таблицы нужно указать достаточную длину поля.
Т.е. если в столбце должно быть 10 русских символов, то нужно описать ее как CHAR(20).
Может конечно можно иначе, но не попадалось пока ни в документации ни в форумах.

ну что-ж ... придется с этим фактом тогда смириться.
Спасибо за ответ.
а по этому вопросу что-нить посоветуете:
http://www.sql.ru/forum/actualthread.aspx?tid=403048
???
успехов Вам!
...
Рейтинг: 0 / 0
24.07.2007, 07:39
    #34678727
Elizabeth Talor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
размерность поля таблицы для базы созданной в 1208 кодировке
JQN8yP A number of universities have awarded her honorary degrees, and she earned a prestigious job on the staff of Detroit congressman John Conyers. In 1988 Roxanne Brown noted: "Thirty-two years after she attracted international attention for sparking the Montgomery Bus Boycott, Mrs. Parks's ardent devotion to human rights still burns brightly, like a well-tended torch that ignites her spirit and calls her to service whenever she is needed."
...
Рейтинг: 0 / 0
26.03.2008, 17:19
    #35215657
sta216
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
размерность поля таблицы для базы созданной в 1208 кодировке
Хоррошо сказано
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / размерность поля таблицы для базы созданной в 1208 кодировке / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]