我在Windows上的數據庫(Oracle 11g)的NLS_CHARACTERSET值爲WE8MSWIN1252,而NLS_NCHAR_CHARACTERSET值爲AL16UTF16。將越南字符集插入到nvarchar2/varchar中,但客戶端無前綴'N'
現在,我有一個表'TEST_NOTE',其列類型爲NVARCHAR2。當運行下面的INSERT語句:
INSERT INTO test_note值(!n'Chào的GIOI')
的數據被插入的罰款,我能夠正確地獲取它。
由於我必須從不同的客戶端軟件(公司的專有軟件)中插入數據,因此我無法將「n」附加到用戶輸入的值中。
另外,我可以用VARCHAR2而不是NVARCHAR做什麼,因爲我不想更改生產中數據庫的現有模式?
我的理想解決方案是使用VARCHAR2並插入越南字符而不使用'n'作爲前綴。
編輯:
我嘗試了以下在Windows 10:
C:\WINDOWS\system32>chcp
Active code page: 437
C:\WINDOWS\system32>set NLS_LANG =.AL32UTF8
C:\WINDOWS\system32>sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Wed Feb 22 11:15:11 2017
Copyright (c) 1982, 2010, Oracle. All rights reserved.
SQL> connect system as sysdba
Enter password:
Connected.
SQL> insert into ss_repo.test_note values ('abcs','Chào thế giới!');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from SS_REPO.TEST_NOTE;
SOEID NOTE
-------------------- --------------------
ID17836 Chào th? gi?i!
s Chào th? gi?i!
abcs Chào th? gi?i!
ABCD Chαo th┐ gi┐i!
或者我可以做從SQL Developer中的一樣嗎?使用它會容易嗎?
將在生產將使用JDBC JAR文件OJDBC6.JAR
但暫時我試圖使用SQL Plus或SQL Developer來辦使用的客戶端。
我認爲你可以直接跳過了'N'前綴,甲骨文將隱式轉換到'NVARCHAR'。但請確保正確設置'NLS_LANG'值。 –
是的,我試過這樣做。但它不起作用;垃圾值正在被儲存。 NLS_LANGAUGE值是AMERICAN NLS_CHARACTERSET值是WE8MSWIN1252 NLS_NCHAR_CHARACTERSET值AL16UTF16 –
我沒有問'NLS_LANGUAGE' - 我問'NLS_LANG'這是不同的,看http://stackoverflow.com/questions/33783902/odbcconnection-returning-chinese-characters-as/33790600#33790600您使用哪個應用程序或驅動程序來插入數據。 –