Oracle Unicode Spooling - PullRequest
       11

Oracle Unicode Spooling

2 голосов
/ 17 ноября 2009

Как мне перенести данные из таблицы в файл, содержащий символы Unicode?

У меня есть файл sql, который я запускаю с экрана SQL * Plus, и его содержимое:

SET ECHO OFF
SET FEEDBACK OFF
SET HEADING OFF
SET PAGESIZE 0
SPOOL STREET_POINT_THR.BQSV
SELECT GEOX||'`'||GEOY||'`'||UNICODE_DESC||'`'||ASCII_DESC 
FROM GEO.STREET_POINTS;
SPOOL OFF

Ответы [ 2 ]

2 голосов
/ 17 ноября 2009

с правильными настройками ваш скрипт работает с SQL * Plus. Вот что я сделал, чтобы проверить это:

  • (очевидно) ваша база данных должна поддерживать юникод. При необходимости используйте NVARCHAR2.
  • Настройте клиентское приложение правильно . убедитесь, что ваша переменная NLS_LANG установлена ​​правильно, она должна поддерживать юникод. Я установил мой на AMERICAN_ENGLISH.UTF8. Хотя в окне DOS SQL * Plus не отображаются все символы Юникода, они будут правильно помещены в файл.
  • (очевидно, тоже), убедитесь, что приложение, которое читает буферный файл, открывает его в правильном наборе символов.

Теперь по сценарию:

SQL> select * from v$nls_parameters where parameter = 'NLS_CHARACTERSET';

PARAMETER          VALUE
------------------ ------
NLS_CHARACTERSET   UTF8

SQL> create table street_points (data varchar2(10));

Table created

SQL> INSERT INTO street_points VALUES (chr(53401)||chr(53398));

1 row inserted

Это вставит русские символы ЙЖ

SQL> SPOOL STREET_POINT_THR.BQSV
SQL> SELECT * FROM STREET_POINTS;
ðÖðû
SQL> SPOOL OFF

Файл, открытый текстовым редактором (в моем случае jEdit) с правильным набором символов (UTF-8), правильно отображает символы.

0 голосов
/ 17 ноября 2009

Я не думаю, что SQLPlus (по крайней мере, в Windows) поддерживает Unicode. Я только что проверил здесь, и это не похоже на работу. Я не уверен, можно ли упоминать об этом здесь, но мой собственный инструмент "Golden 6" поддерживает спулинги в юникоде, хотя это только для Windows. Обратите внимание, что для выбора правильной кодировки необходимо использовать «SET ENCODING [UNICODE | UTF-8 | ANSI] [NOBOM]» перед командой spool.

Марк Форд
Benthic Software
www.benthicsoftware.com

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

...