将vietnamese characterset插入nvarchar2 / varchar,而不从客户端添加前缀'N'

时间:2017-02-21 06:45:30

标签: oracle

我在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。

1 个答案:

答案 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 ...