Oracle 德语字符是否转换为垃圾字符?

Oracle german character are converted to junk character?

我创建了简单的 table,它只有一个字段 TCHAR

SQL> desc test;
 Name                                      Null?    Type
 ----------------------------------------- -------- --------------

 TCHAR                                              CHAR(20)

我创建了一个 .sql 文件和 运行 来自 sqlplus 的 sql 脚本使用 @filepath..\germantest.sql 然后输出被一些垃圾词替换

输出:

SQL> select * from test;

TCHAR
--------------------
Ä
Wir bestß
Nauch à â Ý

但是当我尝试将相同的数据 运行 直接插入 sqlplus 而不是文件时

输入

insert into test values('Ärger Ökonom');
insert into test values('Ä');
insert into test values('Wir bestß');
insert into test values('Nauch à â Ý');

输出

SQL> select * from test;

TCHAR
--------------------
Ärger Ökonom
Ä
Wir bestß
Nauch à â Y

此处显示的输出是正确的。

到目前为止我尝试了什么。

  1. 我检查了文件格式,它必须是 utf-8
  2. 我查了NLS_charset是AL32UTF8

我期待什么?

  1. 当我 运行 来自 sql 开发人员的相同文件时,我得到了正确的输出。

我想 运行 来自 .sql 文件的相同脚本,并希望在数据库中保留原始文件中的德语字符。

您在 Windows 控制台 中的代码页必须 与 SQL*Plus 的 NLS_LANG 设置相匹配。

简而言之,您需要:

c:\> chcp 65001
c:\> SET NLS_LANG=GERMAN_GERMANY.AL32UTF8

如果您在控制台中 运行 type germantest.sql,您可以轻松验证您的代码页是否正确。如果那不能正确显示文件内容,则说明代码页错误:

现在代码页 具有 以匹配 NLS_LANG 设置:

NLS_LANG 的正确值在 运行 运行 SQL 脚本时也很重要,因为它决定了 SQL*Plus 读取文件的编码.

当然 cmd.exe 需要配置为使用可以实际显示这些字符的字体。