powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Русская строка и размер колонки в XMLTABLE
3 сообщений из 3, страница 1 из 1
Русская строка и размер колонки в XMLTABLE
    #36432168
kasyanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столкнулся с проблемой, которую кратко можно показать на примере.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
with x(DOC) as (
values XMLPARSE(document '<POSITION>Заместитель директора</POSITION>')
)
select t.*
from x, xmltable('$DOC/POSITION'
columns
POSITION varchar( 32 ) path '.'
) t;

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
with x(DOC) as (
values XMLPARSE(document '<POSITION>Zamestitell direktora</POSITION>')
)
select t.*
from x, xmltable('$DOC/POSITION'
columns
POSITION varchar( 32 ) path '.'
) t;

Первый запрос возвращает ошибку
Значение "Заместитель директора" нельзя построить с типом данных "VARCHAR_32" или преобразовать в этот тип с использованием явного или неявного преобразования типов. QName ошибки =err:FORG0001.. SQLCODE=-16061, SQLSTATE=10608, DRIVER=3.57.86

Второй запрос работает.

У меня вся база сделана с учетом таких размеров (то есть входные данные не влезают в реляционные поля из-за русских символов). Что делать?
...
Рейтинг: 0 / 0
Русская строка и размер колонки в XMLTABLE
    #36432957
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kasyanov...
Второй запрос работает.

У меня вся база сделана с учетом таких размеров (то есть входные данные не влезают в реляционные поля из-за русских символов). Что делать?varchar(X) - это X байт.
В UTF-8 базе русские символы занимают 2 байта.
Поэтому вы либо:
- расширяете соотв. образом varchar поля в utf-8 базе
- вместо varchar используете vargraphic в utf-8 базе (vargraphic(X) - это X 2-х байтовых символов)
- создаёте базу в однобайтовой кодировке.
только имейте ввиду, что xml данные можно хранить в неюникодной базе начиная с v9.5 и внутри xml данные обрабатываются в юникоде, и в вашем случае, чтоб оно работало, надо делать так (однобайтовая кодировка):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with x(DOC) as (
values XMLPARSE(document '<POSITION>Заместитель директора</POSITION>')
)
select length(t.position) len_bytes, t.position
from x, xmltable('$DOC/POSITION'
columns
POSITION varchar(41) path '.'
) t

LEN_BYTES   POSITION                                 
----------- -----------------------------------------
         21 Заместитель директора                    
...
Рейтинг: 0 / 0
Русская строка и размер колонки в XMLTABLE
    #36432991
kasyanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, Марк.
База у меня в 1251.
Видимо придется переписать вьюхи (увеличить в 2 раза размер в описании XMLTABLE - они сейчас соответствуют типам данных в целевых таблицах), которые я использую для раскладки по реляционным таблицам.

PS Благодарю за помощь в предыдущем посте

Алексей.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Русская строка и размер колонки в XMLTABLE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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