oracle 关于数据库编码字符集和乱码问题(终)

1.查看数据库服务器端编码:

select * from NLS_DATABASE_PARAMETERS where PARAMETER = 'NLS_CHARACTERSET';

可以看到,数据库服务器端的编码字符集是ZHS16GBK(简体中文 16位GBK编码)

这个参数是数据库建立的时候设置的,一般不会轻易改变。

另外,还有两个参数:

select * from NLS_INSTANCE_PARAMETERS  --实例编码
select * from NLS_SESSION_PARAMETERS --会话编码

NLS_INSTANCE_PARAMETERS  --实例编码(是在系统文件中定义的,修改方式:alter system set)
NLS_SESSION_PARAMETERS --会话编码(默认继承自 NLS_INSTANCE_PARAMETERS  ,在客户端环境变量NLS_LANG可覆盖,或者alter session set 可以对单个会话修改)

2.查看客户端编码:

select userenv('language') from dual

select * from NLS_SESSION_PARAMETERS 

编码字符集默认跟数据库一致。

可在环境变量NLS_LANG设置(对sqlplus生效,对部分连接软件如Dbeaver、PLSQL可能不生效)

作用就是:客户端可以根据这个参数对数据库传输过来的数据进行编码的转换,这是自动进行的;反之,客户端想数据库发送数据时也会有一个转换的过程。

乱码问题的解决方法:

如果客户端(PLSQL,Dbeaver等数据库连接软件)查询乱码,

(1)修改环境变量NLS_LANG值为  select userenv('language') from dual  的查询结果 

(2)查看操作系统的活动代码页(windows是chcp),将NLS_LANG值设置为支持操作系统字符集的字符集。

这篇文章写得比较好:https://www.cnblogs.com/bingo1717/p/7803359.html

你可能感兴趣的:(数据库,oracle,服务器)