UTF 8 из таблиц Oracle - PullRequest
       30

UTF 8 из таблиц Oracle

3 голосов
/ 10 декабря 2008

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

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

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

Что мне проверять?

Спасибо

Ответы [ 4 ]

5 голосов
/ 10 декабря 2008

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

select value from nls_database_parameters 
where parameter='NLS_CHARACTERSET'

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

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

1 голос
/ 10 декабря 2008

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

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

0 голосов
/ 10 декабря 2008

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

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

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

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

Приветствия

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

0 голосов
/ 10 декабря 2008

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

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

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