之前因为程序要搬迁,在对Oracle数据库进行导入导出操作的时候,数据表的中文注释以及存储过程和函数中的中文注释均显示乱码。让人着实痛苦。
1、客户端字符集必须与服务端字符集一直
2、加载到Oracle数据库中的数据字符集必须与服务器字符集一致(例如:在不同字符集服务器之间导数据会导致中文乱码)
3、字符集同时存在于Oracle服务器和Oracle客户端
4、服务器字符集是在安装Oracle数据库的时候就指定的,一般不能修改,否则会出问题。如:ZHS16GBK字符集
5、客户端字符集是在Oracle用户环境变量中设定的
一些相关内容:
SELECT * FROM v$nls_valid_values; #查看Oracle数据库可用字符集参数设置
select * from nls_database_parameters; #查看Oracle数据库字符集
select * from nls_instance_parameters; #查看Oracle客户端字符集环境
解决办法:
Oracle客户端字符集由当前用户环境变量NLS_LANG设定
NLS_LANG构成方式:
NLS_LANG=LANGUAGE_TERRITORY.Characterset
LANGUAGE #Oracle消息使用的语言
TERRITORY #服务器日期和数字格式
CHARACTERSET #字符集
例如:
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
备注:客户端与服务端字符集必须一直!但语言设置可以不同!
例如:
NLS_LANG="SIMPLIFIED CHINESE_CHINA".ZHS16GBK
一般建议语言设置用英文
具体操作:
vi /home/oracle/.bash_profile #编辑用户环境变量设置,以CentOS系统为例,在最后一行增加
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
:wq! #保存退出
source .bash_profile #使 bash_profile 设置立刻生效
至此,Linux下Orcle数据库导入导出中文乱码解决方法教程完成。