oracle查询中文数据为乱码

当在Oracle数据库中遇到中文数据显示为乱码时,问题通常出在字符集不匹配。解决方法包括检查并调整数据库服务器和客户端的字符集,以及在必要时修改数据库的字符集设置。在服务器端,可以通过ALTER DATABASE命令更改字符集,而在客户端,可以修改环境变量NLS_LANG以匹配正确的字符集。

乱码的问题,都知道是字符集的问题,需要查看数据库服务器的字符集和客户端的字符集

oracle数据库的字符集更改 

A、oracle server 端 字符集查询 

select userenv('language') from dual 

其中NLS_CHARACTERSET 为server端字符集 

NLS_LANGUAGE 为 server端字符显示形式 

B、查询oracle client端的字符集 

$echo $NLS_LANG 

如果发现你select 出来的数据是乱码,请把client端的字符集配置成与linux操作系统相同的字符集。如果还是有乱码,则有可能是数据库中的数据存在问题,或者是oracle服务端的配置存在问题。 

C、server端字符集修改 

***************************************************************** 

*  更改字符集步骤方法(WE8ISO8859P1 --> ZHS16GBK)            * 

***************************************************************** 

SQL> 

将数据库启动到RESTRICTED模式下做字符集更改: 

SQL> conn /as sysdba 

Connected. 

SQL> shutdown immediate; 

Database closed. 

Database dismounted. 

ORACLE instance shut down. 

SQL> startup mount 

ORACLE instance started. 

Total System Global Area  236000356 bytes 

Fixed Size                   451684 bytes 

Variable Size             201326592 bytes 

Database Buffers           33554432 bytes 

Redo Buffers                 667648 bytes 

Database mounted. 

SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION; 

System altered. 

SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; 

System altered. 

SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0; 

System altered. 

SQL> alter database open; 

Database altered. 

SQL> ALTER DATABASE CHARACTER SET ZHS16GBK; 

ALTER DATABASE CHARACTER SET ZHS16GBK 

ERROR at line 1: 

ORA-12712: new character set must be a superset of old character set 

提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改: 

SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK; 

Database altered. 

SQL> select * from v$nls_parameters; 

略 

19 rows selected. 

重启检查是否更改完成: 

SQL> shutdown immediate; 

Database closed. 

Database dismounted. 

ORACLE instance shut down. 

SQL> startup 

ORACLE instance started. 

Total System Global Area  236000356 bytes 

Fixed Size                   451684 bytes 

Variable Size             201326592 bytes 

Database Buffers           33554432 bytes 

Redo Buffers                 667648 bytes 

Database mounted. 

Database opened. 

SQL> select * from v$nls_parameters; 

略 

19 rows selected. 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 

D、client端字符集修改 

在 /home/oracle与 /root用户目录下的.bash_profile中 

添加或修改 export NLS_LANG="AMERICAN_AMERICA.UTF8" 语句 

关闭当前ssh窗口。

如果你是用的PL/SQL工具查询是乱码需要设置系统环境变量


NLS_LANG="AMERICAN_AMERICA.UTF8"

再次登录plsql查询,显示正常了!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河南骏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值