我创建了一个只有一个字段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
此处显示的输出是正确的。
到目前为止我一直在尝试。
我期待什么?
我想从.sql文件运行相同的脚本,并希望在原始文件中保留数据库中的德语字符。
答案 0 :(得分:2)
Windows控制台中的代码页必须与SQL * Plus的NLS_LANG
设置匹配。
简而言之,您需要:
c:\> chcp 65001
c:\> SET NLS_LANG=GERMAN_GERMANY.AL32UTF8
如果在控制台中运行type germantest.sql
,则可以轻松验证代码页是否正确。如果没有正确显示文件内容,则代码页错误:
现在,代码页已以匹配NLS_LANG设置:
运行SQL脚本时,NLS_LANG的正确值也很重要,因为它确定了SQL * Plus读取文件的编码。
当然cmd.exe
需要配置为使用可以实际显示这些字符的字体。