Oracle

在 PL/SQL 中儲存/檢索中文/Unicode

  • November 30, 2021

我們使用的是 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* 參數)。

引用自:https://dba.stackexchange.com/questions/146046