Функция преобразования не работает с типом данных CLOB - PullRequest
0 голосов
/ 29 августа 2018

У нас есть некоторые данные типа lob и varchar2, которые неправильно кодируются в AL32UTF8, и нам нужно преобразовать их кодировку в набор символов we8mswin1252. Я получил функцию преобразования, которая используется для преобразования набора символов, и эта функция прекрасно работает с типом данных varchar2, но при использовании с CLOB дает нечеткие символы. Моя текущая кодировка AL32UTF8.

 select value,CONVERT(value,'we8mswin1252','AL32UTF8'),CONVERT(to_clob(value),'we8mswin1252','AL32UTF8') from temp;

enter image description here

База данных: Oracle 12c

select * from nls_database_parameters where parameter like  '%CHARACTERSET%';

enter image description here

1 Ответ

0 голосов
/ 20 сентября 2018

Ответ, который я получил от Oracle: Msgstr "Функция CONVERT - это устаревшая функция, которую нельзя использовать для какого-либо преобразования набора символов, связанного с приложением. CLOB особенно сложен, поскольку он использует специальную кодировку хранилища в многобайтовых базах данных, таких как AL32UTF8. CONVERT полезен только для некоторых задач ремонта. Поддерживаемый способ обработки данных в наборах символов, отличных от набора символов базы данных, заключается в использовании типа данных RAW и процедур преобразования из пакета UTL_I18N. Однако UTL_I18N не поддерживает CLOB. Следовательно, вам необходимо прочитать CLOB в виде блоков по 32 КБ, преобразовать их в WE8MSWIN1252 с помощью UTL_I18N.STRING_TO_RAW, выполнить постобработку и записать файл с помощью UTL_FILE.PUT_RAW. "

Кроме того, я получил еще одну Unix-команду iconv, которая преобразует кодировку файла, поэтому в основном я записывал вывод db в файл, поэтому преобразовал его кодировку и передал данные.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...