2

如何将表中的数据假脱机到包含 Unicode 字符的文件?

我有一个从 SQL*Plus 屏幕执行的 sql 文件,它的内容是:

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
4

2 回答 2

2

通过正确的设置,您的脚本可以与 SQL*Plus 一起使用。这是我为测试它所做的:

  • (显然)您的数据库必须支持 unicode。如有必要,请使用 NVARCHAR2。
  • 正确设置您的客户端应用程序。确保您的 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)打开的文件可以正确显示字符。

于 2009-11-17T15:32:42.660 回答
0

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

马克福特
Benthic Software
www.benthicsoftware.com

编辑:正如文森特指出的那样,它正在工作。请注意,创建的 UTF-8 文件没有 BOM,而是一个 UTF-8 文件。

于 2009-11-17T14:59:20.283 回答