UTF 8 из таблиц Oracle

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

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

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

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

Спасибо

10.12.2008 09:47:50
4 ОТВЕТА
РЕШЕНИЕ

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

select value from nls_database_parameters 
where parameter='NLS_CHARACTERSET'

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

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

5
10.12.2008 10:03:16
Разве это не набор символов базы данных? Oracle может конвертировать, если считает, что вашему клиенту нужен другой набор символов.
WW. 10.12.2008 12:28:11

То, что вы должны искать - это восьмибитные символы ascii при вводе hte (если они есть), переводимые в двухбайтовые символы utf-8.

Это сильно зависит от вашей локальной кодовой страницы ASCII, но обычно: - ASCII "£" должен быть x'A3 ', поскольку ascii волшебным образом становится x'C2A3' в utf-8.

0
10.12.2008 10:27:12

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

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

1
10.12.2008 14:22:38

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

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

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

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

ура

Возможно, важно, чтобы NLS_CHARACTERSET был AL32UTF8, а NLS_NCHAR_CHARACTERSET - AL16UTF16

0
10.12.2008 16:42:17
Файл представляет собой последовательность байтов. Textpad показывает вам, как он будет переводить эти байты в отображаемые символы при условии, что это файл ANSI. Я использую PSPad, который позволяет вам выбрать, какую кодировку он использует для интерпретации байтов. Я думаю, у Textpad есть что-то похожее.
Gary Myers 10.12.2008 22:02:03
Интересное спасибо, это несколько меняет мое понимание.
Robert 12.12.2008 13:15:15