WE8ISO8859P15 -> AL32UTF8

nokite
Дата: 02.12.2009 13:36:11
Добрый день!
Может быть название топика неточное ..
Суть проблемы.
Есть две базы, связанных по dblink : первая с WE8ISO8859P15 (10.2) вторая c AL32UTF8(11.2)
При создании view во второй базе на основании таблицы из первой
все поля varchar2(100) становятся varchar2(300).
(Из-за этого ругается wh builder 11.2)
Можно ли избежать такой трансформации?
Sergei.Agalakov
Дата: 03.12.2009 20:01:04
varchar2(100 byte) или varchar2(100 char)?
Varchar2(100 char) с WE8ISO8859P15 должна без проблем стать varchar2(100 char) c AL32UTF8. В байтовой семантике такого не получится, т.к. однобайтовый символ WE8ISO8859P15 может превратиться в три байта для AL32UTF8 (€ например). Потому-то в байтовой семантике и будет резервироваься 3 байта для AL32UTF8 на каждый байт WE8ISO8859P15.
Alex_IZA
Дата: 04.12.2009 09:14:56
>Можно ли избежать такой трансформации?


Видимо нельзя, хотя старнно что в три раза а не в два. Для европейских достаточно двух байт. С другой стороны странно что не в 4-е, если берет по максимуму.
Из доки по курсу оракл:
AL32UTF8 Encoding
AL32UTF8 encoding is the 8-bit encoding of Unicode. It is a variable-width type of encoding
and also a strict superset of ASCII. A strict superset means that each and every character in 7-bit
ASCII is available in AL32UTF8 with the same corresponding codepoint value.
One Unicode character can be 1, 2, 3, or 4 bytes in this encoding. Characters from the European
scripts are represented in either 1 or 2 bytes; characters from most Asian scripts are represented
in 3 bytes, whereas supplementary characters are represented in 4 bytes.

Кстати получается что чарсет базы можно установить в AL32UTF8 но нельзя в AL16UTF16? Тоесть в мультибайт переменной длинны можно а в мультибайт фиксированной нельзя? А то я уже запутался во что можно чарсет ставить...