sqlplus乱码原因分析

如果客户端设定的字符集NLS_LANG和服务器端的字符集设定NLS_CHARACTERSET不一致的话,数据在客户端和服务器端进行流动时会有一个转换
客户端字符集<->UNICODE<->服务器端字符集
字符集一致的时候不会发生转换。

而sqlplus上显示的数据要求os的支持。

那么就可以知道产生乱码应该有以下几种

1.数据没有正确存储
当客户端字符集设定和服务器端字符集设定不一致的时候,客户端录入的字符无法正确转换为服务器端所支持的字符,也就是说录入字符属于客户端的字符集,但是不属于服务器端的字符集。这种情况下,字符是没有正确存入数据库,全部转换为默认字符“?”

解决方法:
a.服务器这种不支持的字符,不允许录入
b.客户端和数据库端的字符集都设定为支持录入字符的字符集
c.统一客户端和数据库端的字符集
d.使用unicode存储字符

2.数据没能正确读取
和1一样,如果服务器端原有的字符,无法正确转换为客户端字符,那么也会乱码

解决方法同1

3.数据的转换没有任何问题,而客户端无法支持
这个因为客户端app的局限性造成的,比如sqlplus就有很多字符集无法正确表示

解决方法:
a.把客户端的字符集NLS_LANG设定为app/os支持的字符集
b.如果app/os的字符集可更改,改成与客户端的字符集设定NLS_LANG同样

--------------
服务器端的字符集设置(一旦设置,一般不可更改)

select * from nls_database_parameters;


使用以下sql可查寻本次链接设置

select * from v$nls_parameters;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值