PLSQL developer 导入Excel数据到linux安装的Oracle中文乱码问题

时间: 2023-12-16 admin IT培训

PL/SQL developer 导入Excel数据到linux安装的Oracle中文乱码问题

PL/SQL developer 导入Excel数据到linux安装的Oracle中文乱码问题

解决oracle中文显示乱码有三层地方需要调整或者修改
第一层:操作系统层

locale -a

查看操作系统是否安装了中文字符集

2.设置用户的中文字符集

查看到linux安装了中文字符集,那么oracle用户下面要设置中文字符集
原为LANG=“en_US.UTF-8”

vim /etc/locale.conf # centos7是这个配置文件,有的linux是这个配置文件/etc/sysconfig/i18n
LANG="zh_CN.UTF-8"

我的redhat 6.4是在/etc/sysconfig/i18n中设置。
上面的那种方法设置完后,系统所有用户的字符集都是UTF-8。也可以改单个用户的字符集,就是在用户下的环境变量配置文件里面.bashrc里面直接,但本人没有进行验证

export LANG="zh_CN.UTF-8"

然后查看操作系统的字符集,进入Oracle用户查看

env |grep LANG
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
LANG=zh_CN.UTF-8

可以看到NLS_LANG中是AL32UTF8

第二层:数据库层
在数据库里面查询数据库和实例的字符集

    select * from nls_database_parameters;select * from nls_instance_parameters;
PARAMETER                      VALUE
------------------------------ --------------------
NLS_RDBMS_VERSION              12.2.0.1.0
NLS_NCHAR_CONV_EXCP            FALSE
NLS_LENGTH_SEMANTICS           BYTE
NLS_COMP                       BINARY
NLS_DUAL_CURRENCY              $
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZRNLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AMNLS_TIME_FORMAT                HH.MI.SSXFF AM
NLS_SORT                       BINARY
NLS_DATE_LANGUAGE              AMERICAN
NLS_DATE_FORMAT                DD-MON-RR
NLS_CALENDAR                   GREGORIAN
NLS_NUMERIC_CHARACTERS         .,
NLS_NCHAR_CHARACTERSET         AL16UTF16
NLS_CHARACTERSET               AL32UTF8
NLS_ISO_CURRENCY               AMERICA
NLS_CURRENCY                   $
NLS_TERRITORY                  AMERICA
NLS_LANGUAGE                   AMERICAN20 rows selected.

可以看到数据库的字符集是 AL32UTF8;保持服务端和客户端的字符集一致即可

这样之后,那我们打开sqlplus 查询中文,一般就能正常显示了,如果还是乱码,那就新insert一个中文看看,因为修改之前的字符编码跟修改之后的不一致。

若需要进行数据库字符集修改,进行以下操作
1、启动监听并打开数据库
2、查看Oracle数据库字符集

select userenv('language') from dual;

4.修改Oracle数据库字符集

SQL> shutdown immediate;
SQL> startup mount;
SQL> alter system enable restricted session;
SQL> alter system set job_queue_processes=0;
SQL> alter system set aq_tm_processes=0;
sql> alter database open;
SQL> alter database character set AL32UTF8 #你要的编码集,比如ZHS16GBK,AL32UTF8
SQL> shutdown immediate;
SQL> startup;

这样就将数据库字符集修改过来了

第三层:plsql层(windows层)
重要的PLSQL层,由于我们是通过PLSQL导入Excel数据的,所以首先要保证这部分是中文。
首先修改Windows的环境变量
右击我的电脑,点击“属性”–>“环境变量”,在系统变量中新建键值分别为NLS_LANG:SIMPLIFIED CHINESE_CHINA.AL32UTF8

然后在PLSQL中进行修改
在PLSQL中点击菜单 tools后点击preferences 在弹出的设置窗口中找到 Appearance下的language,选择设置简体中文即可。

经过以上三层的修改,在PLSQL中进行Excel数据导入后,查询正常。