中文系统上用oracle真的很麻烦,尤其像我们这种:操作系统是英文的,区域设成中文,估计oracle也给搞晕了。
安装完数据库发现instance 的nls_language是中文,如下图
而database的nls_language的设置是英文,如下图:
使用下面的语句将instance的nls_language设置也改成英文
alter system set nls_language = 'AMERICAN' scope =
spfile;
alter system set nls_territory = 'AMERICA' scope = spfile;
改完后需要重新启动数据库才生效,或者没准log out再log in就可以了?
修改之后instance的nls_language也改成英文了。
接下来的问题是关于instance
client的,通常安装oracle的客户端会在注册表里创建一些key,其中包括nls_language一项,但是instance
client没有,那它从哪里读nls_language的设置呢?通过我的实验发现只和数据库端的设置有关。
之前用instance的sqlplus连接数据库有乱码,忘了截图了,执行完alter
system命令后,显示正常,如下图
同一台机器上oracle home下的sqlplus连接数据库后有乱码(因为当前系统的language for
non-unicode设置的为英文,所以中文无法正常显示),如下图
检查oracle home的注册表,发现nls_language设为中文
所以说oracle instance
client的语言会使用instance的设置,而oracle可安装的客户端的语言需要通过注册表设置。
如果想把注册表的nls_lang改为英文可以将其设为:AMERICAN_AMERICA.WE8MSWIN1252