匿名用户如果Oracle没有设置客户端字符集变量NLS_LANG,那么客户端默认会用什么字符集?
如果不设置 NLS_LANG,NLS_LANG 值默认为空,数据库查询出来的客户端字符集为对应数据库字符集,并不影响使用,我还原了一下:

关于客户端字符集和数据库字符集可以参考:《Oracle 查看数据库字符集和客户端字符集 SQL 语句》
评论
有用 0
我感觉应该不行。在客户端登录时,会提示:
ERROR:
ORA-12705: Cannot access NLS data files or invalid environment specified
评论
有用 0我数据库字符集是AMERICAN_AMERICA.AL32UTF8

然后把操作系统里的环境变量、注册表里的字符集都删了,登录plsqldeveloper,提示

点确定进去

再看看sqlplus

然后把环境变量配置上去看看,

会弹出字符集不匹配的信息,点确定进去


最后看下官方的解释

如果没有设置字符集,则根据设置的语言来选择对应的字符集,没有设置语言的话就是默认语言
另外,注意一点,目前网上大部分文章说下面这个sql可以查客户端字符集,其实是错的,它的语言虽然的确是客户端语言,但他这个字符集其实是数据库的字符集
select userenv('language') from dual


官网的说明

评论
有用 2select value from v$nls_parameters where parameter='NLS_CHARACTERSET'
或
select userenv('language') from dual;
得到的都是DB端字符集。换言之,alter session set NLS_CHARACTERSET='xxx'; 这句应该执行会报错的。就是说客户端连入后,就无法改当前session字符集,对吧。如果运行
select value from nls_session_parameters where parameter='NLS_CHARACTERSET';
查询无记录,是否也印证了无法在session里修改其值?
评论
有用 0
墨值悬赏


