在Linux下将oracle数据库碰到字符乱码时改成utf8编码的方法

在Linux下oracle数据库碰到字符乱码的解决方法


linux下Oracle显示中文乱码的情况和原因

 DEPTNO DNAME          LOC
---------- -------------- -------------
        41 41??????dname  41??????loc
        31 31??????dname  31??????loc
        55 50dname        50loc

操作系统与服务器一致,但客户端与服务器字符集不一致
客户端与服务器一致,但操作系统与服务器不一致

解决办法
设置相关的字符集,保证操作系统、客户端、数据库服务器,保证这三者的字符集都相同。

1在linux下查看oracle数据库服务器字符集的命令
查看数据库字符集 select userenv('language') from dual;
显示

AMERICAN_AMERICA.ZHS16GBK;

说明这个数据库的字符集不是utf-8

2 更改数据库服务器端的字符集

sqlplus sys/ as sysdba;//以管理员的身份登陆oracle数据库
执行以下命令

shutdown immediate; (把database停了)

startup mount; (把database重开去可更改情況)

alter system enable restricted session;

alter system set job_queue_processes=0;

alter system set aq_tm_processes=0;

alter database open;

alter database character set internal_use utf8;

shutdown immediate;

startup; (重开正常oracle)
再次执行命令
select userenv('language') from dual;
出现 AMERICAN_AMERICA.UTF8明服务器的字符编已经修改为utf8格式

**3查看客户端环境变量
执行命令
echo $NLS_LANG**
出现AMERICAN_AMERICA.ZHS16GBK;说明客户端的字符编码不是utf8格式的

4配置当前用户的环境变量,将客户端的字符集改为utf8格式

vi .bash_profile   

在.bash_profile中加入环境变量

export NLS_LANG=AMERICAN_AMERICA.UTF8       
$ source .bash_profile`  //执行source命令使修改完的.bash_profile文件生效

这样客户端的字符集也修改成utf8格式的

5操作系统字符集的修改

cat /etc/sysconfig/i18n //查看linux配置文件里默认设置的字符集字体

# vim /etc/sysconfig/i18n //修改i18n里面linux的默认字符集

i18n文件内容如下:
LANG="en_US.GBK" //把这一项的值改成UTF8字符集,改为:LANG="en_US.UTF-8" en_US代表系统本身是用英文显示的,中文为:zh_CN编码格式是UTF-8
# source /etc/sysconfig/i18n //执行source 命令使i18n文件的修改生效.

修改完后,再切换回oracle用户,再用命令locale或者是echo $LANG查看下当前的操作系统字符集,你会发现已经和客户端和数据库的一致了,都是UTF8.这个时候你再进入oracle数据库的测试环境时,对表插入中文,修改,查询都正常显示了,不会再有乱码的问题了

相关连接

你可能感兴趣的:(Linux)