2009-11-17 57 views
2

如何將數據從表中轉換爲包含Unicode字符的文件?Oracle 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

使用正確的設置,您的腳本可以與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 

的文件,用文本編輯器(jEdit的在我的情況)打開俄語字符設置(UTF-8)正確顯示字符。

+0

文森特是正確的!我沒有注意到假脫機文件不包含UTF-8 BOM,所以在我的編輯器中作爲ASCII加載。 – MarkF 2009-11-17 15:45:43

+0

謝謝!我處在我的路上;但是我已經用word打開了生成的假脫機文件(用於快速測試),它甚至可以識別編碼! (也許是因爲它安裝在我的機器上) – 2009-11-18 08:38:09

0

我不認爲的SQLPlus(至少在Windows上)支持Unicode。我只是在這裏測試,它似乎並沒有工作。我不確定是否可以在這裏提到這一點,但我自己的工具「Golden 6」確實支持unicode假脫機,儘管它只是Windows。請注意,您必須在spool命令之前使用「SET ENCODING [UNICODE | UTF-8 | ANSI] [NOBOM]」來選擇正確的編碼。

馬克福特
底棲軟件
www.benthicsoftware.com

編輯:文森特指出,這是工作。請注意,創建的UTF-8文件沒有BOM,但是是UTF-8文件。