|
Неявное преобразование getClobVal [UTF8 -> WINDOWS-1251]
|
|||
---|---|---|---|
#18+
Интересное неявное преобразование обнаружил. В этом запросе, я попытался воспроизвести жизненный цикл одной XML. Она, путешествуя по разным местам кода, несколько раз преобразовывается, и, в конечном итоге, оказывается непригодной для работы. Oracle 12c - 12.2.0.1.0 64 bit Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
В результате, получаем: в полях x1 - x3 Код: xml 1.
в полях x4,x5 ( Интересно, почему?) Код: xml 1.
Возможно, дело в этом: Код: plsql 1. 2.
На машинах, на которых SYS_CONTEXT ('USERENV', 'LANGUAGE') выдает AMERICAN_AMERICA.AL32UTF8 - не происходит подмена кодировки. Но, может, я и ошибаюсь насчет причин, и дело в чем-то другом? В любом случае, мне не кажется такое преобразование нормальным поведением. Кстати, у меня x4 превращается в WINDOWS-1251 только в PL/SQL Developer ( видимо, настройки сессии отличаются от настройки в других программах) А вот x5 - превращается в WINDOWS-1251 - во всех трех программах Oracle SQL Developer / DBForge / PL/SQL Developer Интересно так же то, что в x3,x4,x5 оказывается перезаписана структура XML - заменена конструкция Код: xml 1.
на один самозакрытый тег Код: xml 1.
. Видимо, это говорит о том, что оракловый движек не просто работает с байтами тела XML, а полностью парсит, разбирает и собирает заново XML. И, в какой-то момент, он "забывает" какой XMLROOT нужно использовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 14:35 |
|
Неявное преобразование getClobVal [UTF8 -> WINDOWS-1251]
|
|||
---|---|---|---|
#18+
ART-CODE, CLOB - это текстовая строка, ты же сохраняя строку в базе, хочешь, чтобы другие пользователи с другим nls_lang могли ее прочитать? Вот оракл и старается за тебя. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 14:41 |
|
Неявное преобразование getClobVal [UTF8 -> WINDOWS-1251]
|
|||
---|---|---|---|
#18+
Sayan Malakshinov, Спасибо, ясно. Хуже всего то, что в этой XML вложена через CDATA другая XML, которая тоже в UTF8. Просле таких преобразований, вложенная - становится поврежденной. Внешняя XML "старается быть" в 1251, а внутренняя "хочет оставаться" в UTF8. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 15:25 |
|
Неявное преобразование getClobVal [UTF8 -> WINDOWS-1251]
|
|||
---|---|---|---|
#18+
ART-CODE Sayan Malakshinov, Спасибо, ясно. Хуже всего то, что в этой XML вложена через CDATA другая XML, которая тоже в UTF8. Просле таких преобразований, вложенная - становится поврежденной. Внешняя XML "старается быть" в 1251, а внутренняя "хочет оставаться" в UTF8. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 15:48 |
|
Неявное преобразование getClobVal [UTF8 -> WINDOWS-1251]
|
|||
---|---|---|---|
#18+
Sayan Malakshinov не надо работать с xmltype через getclobval/getblobval. Есть поля CLOB и BLOB в таблицах, в которые эту XML нужно сохранить. Как получить эти типы из xmltype без использования getclobval/getblobval - на эту тему еще придется "изобретать велосипед". Менять "чужую" архитектуру, и делать в таблицах поля с типом данных xmltype, нет возможности. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 16:48 |
|
|
start [/forum/topic.php?fid=52&msg=40063922&tid=1880276]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 250ms |
total: | 390ms |
0 / 0 |