我在Windows上有一个数据库(Oracle 11g),其NLS_CHARACTERSET值为WE8MSWIN1252,而NLS_NCHAR_CHARACTERSET值为AL16UTF16。
现在,我有一个表'TEST_NOTE',其列类型为NVARCHAR2。运行以下insert语句时:
插入test_note值(n'Chàothếgiới!')
数据插入正常,我可以正确获取它。
由于我必须从其他客户端软件(公司的专有软件)插入数据,因此我无法将'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 :(得分:0)
代码页437不支持任何越南字符。
当您设置set NLS_LANG =.AL32UTF8
时,您必须事先执行chcp 65001
才能将您的代码页(以及SQL * Plus的字符集)更改为UTF-8
但是,在Windows命令行上使用UTF-8存在一些问题,请参阅此讨论:https://community.oracle.com/thread/600575
您还可以尝试适用于越南语的Codepage 1258:
C:\>chcp 1258
Active code page: 1258
C:\>set NLS_LANG =.VN8MSWIN1258
C:\>sqlplus ...