关于Oracle设置字符集
1、oracle字符集说明
网上很多,说的比较明白的个人推荐
参考:
Oracle 客户端 NLS_LANG 的设置
2、修改字符集
不用修改全部,只修改最后一部分即可,前半部分作为提示语言使用,如果前半部分不能匹配,只是Oracle提示会出现???。
SIMPLIFIED Chinese_CHINA.ZHS16GBK
AMERICAN_AMERICA.ZHS16GBK
查询结果中文部分都正常显示
3、本人遇到问题
修改注册表中的字符集nls_lang不起作用,必须在环境变量中建立nls_lang变量,通过环境变量修改才能实现字符集的变更,主要是查询数据中文不显示乱码。
通过对比试验,使用以下语句校验
select t.*,t.rowid from comm.applications t;-- for update
select * from nls_session_parameters; --会话字符集
select * from nls_instance_parameters; --客户端字符集
select * from nls_database_parameters; --数据库字符集
select userenv(‘language’) from dual; --当前环境中字符集同数据库
根据资料主要看会话端NLS_CHARACTERSET是否和数据库一致
通过对比发现,如果不设置环境变量,无论如何修改注册表,客户端的NLS_CHARACTERSET都是US7ASCII
只有设置了环境变量,通过环境变量修改字符集才会起作用
貌似有点眉目:
(1)如果是安装的Oracle(客户端或者服务端),修改注册表NLS_LANG和环境变量都可以。
(2)如果在之后使用了免安装版的installclient11.1之类的包,并且在环境变量path路径中配置了指向该免安装包的地址,那只能能通过修改环境变量中的NLS_LANG解决问题