UTF 8 из таблиц Oracle

голоса
3

Клиент попросил несколько таблиц, которые будут извлечены в формате CSV, все не сделано никаких проблем. Они просто попросили нас убедиться, что файлы всегда в формате UTF-8.

Как я могу проверить это на самом деле. Или еще лучше заставить его быть, это что-то я могу установить в процедуре перед выполнением запроса, может быть?

Данные извлекаются из базы данных Oracle 10g.

Что я должен проверять?

благодаря

Задан 10/12/2008 в 10:47
источник пользователем
На других языках...                            


4 ответов

голоса
5

Вы можете проверить характер базы данных установить с помощью следующего запроса:

select value from nls_database_parameters 
where parameter='NLS_CHARACTERSET'

Если он говорит AL32UTF8 тогда ваша база данных в формате, что вам нужно, и если экспорт не нарушает его, то ваш сделали.

Вы можете прочитать о поддержке Oracle глобализации здесь и здесь о параметрах NLS , как выше.

Ответил 10/12/2008 в 11:03
источник пользователем

голоса
1

Как именно вы генерировать файлы CSV? В зависимости от конкретной архитектуры, будут разные ответы.

Если вы, например, с помощью SQL * Plus для извлечения данных, вам нужно будет установить NLS_LANGна клиентской машине что - то подходящее (т.е. AMERICAN_AMERICA.AL32UTF8) , чтобы заставить данные для отправки на клиентской машине в UTF-8 , Если вы используете другие подходы, NLS_LANGможет или не может иметь важное значение.

Ответил 10/12/2008 в 15:22
источник пользователем

голоса
0

Хорошо это было не так просто, как я надеялся первым. Приведенный выше запрос возвращает AL32UTF8.

Я использую хранимая процедура компилируется в базе данных в цикле через список имен таблиц, проведенных в массиве внутри хранимой процедуры.

Я использую пакет DBMS_SQL для построения SQL и UTL_FILE.PUT_NCHAR для вставки данных в текстовый файл.

Я верил тогда мой полученный результат будет в UTF 8, однако открытие в Textpad говорит, что в ANSI и данные искажены в местах :)

ура

Это может быть важно, что NLS_CHARACTERSET является AL32UTF8 и NLS_NCHAR_CHARACTERSET является AL16UTF16

Ответил 10/12/2008 в 17:42
источник пользователем

голоса
0

То, что вы должны смотреть на это восемь-битовых символов ASCII в Hte ввода (если таковые имеются) переведены в двойной байт UTF-8 символов.

Это сильно зависит от вашей локальной страницы ASCII код, но обычно: - ASCII «£» должен быть x'A3' в ASCII волшебно становится x'C2A3' в UTF-8.

Ответил 10/12/2008 в 11:27
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more