Oracle Unicode Spooling

时间:2009-11-17 14:40:58

标签: oracle unicode spool

如何将表中的数据假脱机到包含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 个答案:

答案 0 :(得分:2)

使用正确的设置,您的脚本可以与SQL * Plus一起使用。以下是我测试它的方法:

  • (显然)您的数据库必须支持unicode。如有必要,请使用NVARCHAR2。
  • Setup your client application correctly。确保您的NLS_LANG变量设置正确,它必须支持unicode。我将我的设置为AMERICAN_ENGLISH.UTF8。虽然SQL * Plus的DOS窗口不会显示所有unicode字符,但它们将被正确假脱机到文件中。
  • (显然也是)确保读取假脱机文件的应用程序在正确的字符集中打开它。

现在为剧本:

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

使用正确的字符集(UTF-8)使用文本编辑器(在我的情况下为jEdit)打开的文件正确显示字符。

答案 1 :(得分:0)

我认为SQLPlus(至少在Windows上)不支持unicode。我刚刚在这里测试过它似乎不起作用。我不确定这里是否可以提及,但我自己的工具“Golden 6”确实支持unicode假脱机,尽管它只是Windows。请注意,您必须在spool命令之前使用“SET ENCODING [UNICODE | UTF-8 | ANSI] [NOBOM]”来选择正确的编码。

马克·福特(Mark Ford) 底栖软件
www.benthicsoftware.com

编辑:正如文森特指出的那样,它正在发挥作用。请注意,创建的UTF-8文件没有BOM,但是是UTF-8文件。