Linux下Oracle中文数据显示为倒着的问号
原因为Linux系统环境变量的字符集编码和Oracle的字符集编码不一致。
需要将二者都改为SIMPLIFIED CHINESE_CHINA.ZHS16GBK
更改系统环境变量
查看系统的环境变量NLS_LANG。
echo $NLS_LANG
在.bash_profile文件中更改该值。
vim /home/oracle/.bash_profile
#添加该值
export NLS_LANG="SIMPLIFIED CHINESE_CHINA".ZHS16GBK
保存并退出。
使配置文件生效。
source /home/oracle/.bash_profile
更改Oracle编码
查看oracle字符集编码
select * from v$nls_parameters;
查看NLS_CHARACTERSET的值
或者
select userenv('language') from dual;
-------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
如果不是SIMPLIFIED CHINESE_CHINA.ZHS16GBK,需要更改为该值。
网上说按如下命令直接更改,我尝试后结果报错。
ALTER SESSION SET NLS_LANGUAGE='SIMPLIFIED CHINESE';
按照下面步骤则可以成功。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 1071333376 bytes
Fixed Size 1375792 bytes
Variable Size 637534672 bytes
Database Buffers 427819008 bytes
Redo Buffers 4603904 bytes
数据库装载完毕。
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 internal_use ZHS16GBK;
数据库已更改。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 1071333376 bytes
Fixed Size 1375792 bytes
Variable Size 637534672 bytes
Database Buffers 427819008 bytes
Redo Buffers 4603904 bytes
数据库装载完毕。
数据库已经打开。
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
修改完成。
这时尝试向Oracle中插入中文数据,在服务器界面仍然显示为小方框,不过在数据库操作工具Navicat上可以看到,中文数据已经显示正常。