【发布时间】:2017-02-03 07:38:45
【问题描述】:
我创建了一个简单的表,它只有一个字段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
这里显示的输出是正确的。
我到现在为止的尝试。
- 我检查了文件格式,它必须是 utf-8
- 我检查了 NLS_charset,它是 AL32UTF8。
我期待什么?
- 当我从 sqldeveloper 运行相同的文件时,我得到了正确的输出。
我想从 .sql 文件运行相同的脚本,并希望在数据库中保留原始文件中的德语字符。
【问题讨论】:
-
如果这些字符在 SQL Developer 中正确显示,则它们在数据库中存储正确。 SQL*Plus 不能正确显示它们的事实意味着您的控制台字体不支持这些字符(或 UTF-8)。另一种选择是 SQL*Plus 的 NLS 环境配置不正确。您使用的是哪种操作系统?
-
我们使用的是windows7.当我们从 sqldeveloper 运行文件时,数据没有正确存储,我们得到正确的输出,但是当我们从 sqlplus 运行相同的文件时,得到奇怪的输出。
-
NLS_LANG 的正确值是多少?我目前已经尝试过这一套 NLS_LANG=AMERICAN_AMERICA.AL32UTF8
-
活动代码页为 437
标签: windows oracle character-encoding sqlplus