Oracle
在 PL/SQL 中儲存/檢索中文/Unicode
我們使用的是 Oracle9i 企業版。我在 PL/SQL 中嘗試了以下操作。MANUFACTUERER 欄位定義為 VARCHAR2(75)。我用 NVARCHAR2(75) 嘗試了類似的表,結果相同。
INSERT INTO TLP.part_extensions_tab(MANUFACTURER, MANUFACTURER_ADDRESS_LINE ) SELECT 'Neal Chinese Test 06', '统一通信系统)【功能性备注:集团电话' FROM DUAL; commit; select MANUFACTURER, MANUFACTURER_ADDRESS_LINE from TLP.part_extensions_tab where MANUFACTURER like 'Neal Chinese Test 06' ;
SQL 執行,但返回以下問號;所以我不確定插入是否有效,或者我在用中文顯示文本時遇到問題。
我的另一個Google搜尋帶我走這條路(不確定這是否是死胡同):
DECLARE MyLanguage nvarchar2(30); BEGIN --EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_LANGUAGE = ''SPANISH'''; EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_LANGUAGE = ''SIMPLIFIED CHINESE_CHINA.ZHS16GBK'''; select Value into MyLanguage from nls_database_parameters where Parameter = 'NLS_LANGUAGE'; DBMS_OUTPUT.put_line('MyLanguage=' || MyLanguage); --DBMS_OUTPUT.put_line('NLS_LANG=' || NLS_LANG); END; --SELECT USERENV ('language') FROM DUAL;
但這給了我“ORA-12705;指定了無效或未知的 NLS 參數值。我不知道是否需要在我的客戶端、伺服器上安裝該語言,或者我的語法是錯誤的。當我嘗試西班牙語時,SQL執行沒有錯誤,結果顯示為 Spanish.American。 強調文本
您不能將中文字元儲存在西歐字元集中 (
WE8ISO8859P1
)。將列定義
MANUFACTURER_ADDRESS_LINE
為 NVARCHAR2 以使用AL16UTF16
並插入字元串,如下所示(注意N
修飾符):INSERT INTO tc(MANUFACTURER, MANUFACTURER_ADDRESS_LINE ) SELECT 'Neal Chinese Test 06', N'统一通信系统)【功能性备注:集团电话' FROM DUAL; commit;
對於 PL/SQL Developer:將程式碼編輯器字型更改為“Segoe UI Symbol”或“Segoe MDL2 Assets”。不應更改其他首選項(regedit、NLS* 參數)。