2017-02-21 70 views
0

我在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來辦使用的客戶端。

+0

我認爲你可以直接跳過了'N'前綴,甲骨文將隱式轉換到'NVARCHAR'。但請確保正確設置'NLS_LANG'值。 –

+0

是的,我試過這樣做。但它不起作用;垃圾值正在被儲存。 NLS_LANGAUGE值是AMERICAN NLS_CHARACTERSET值是WE8MSWIN1252 NLS_NCHAR_CHARACTERSET值AL16UTF16 –

+0

我沒有問'NLS_LANGUAGE' - 我問'NLS_LANG'這是不同的,看http://stackoverflow.com/questions/33783902/odbcconnection-returning-chinese-characters-as/33790600#33790600您使用哪個應用程序或驅動程序來插入數據。 –

回答

0

代碼頁437不支持任何越南文字符。

當您設置set NLS_LANG =.AL32UTF8那麼你必須爲了提前執行chcp 65001到您的代碼頁(也因此而字符集的SQL * Plus)的改變爲UTF-8

然而,使用UTF-8在Windows命令行有一些問題,看到這樣的討論:https://community.oracle.com/thread/600575

您也可以嘗試代碼頁1258應越南工作:

C:\>chcp 1258 
Active code page: 1258 

C:\>set NLS_LANG =.VN8MSWIN1258 

C:\>sqlplus ...