最近遇到使用sqluldr2 导出数据出现后在excel中打开后出现中文乱码问题
数据库 AL32UTF8
服务器为 en_US.UTF-8
导出参数 query 语句中存在中文别名时,会出现 标识符太长的问题 ora-00972 。
发现sqluldr中存在charset 参数,因此加上 charset=ZHS16GBK ,但又出现无效字符问题 ora-00911 。
经过不断尝试,个人认为是在解析sql 语句时也会使用charset 而query中的中文又依赖ssh客户端的编码设置,于是将ssh客户端设置为gbk后,导出正确,且标题中文也不是乱码。
但我们的需求是:在服务器上导出,导出脚本是一个文件。经过测试,将脚本文件的编码更改为gbk以后,也可正常导出,无乱码。
使用如下命令执行
sh exportdata.sh
exportdata.sh的内容示例如下:
sqluldr2 user=scott/tigger@orcl query="select name 姓名 from users" charset=ZHS16GBK file=/app/test.csv head=yes
或者将query 写入文本文件,同时将文本文件的编码改为gbk
sqludlr2 user=scott/tigger@orcl sql=query.sql charset=ZHS16GBK file=/app/test.csv head=yes
都可导出文件,同时满足 标题为中文且在excel打开导出文件中文无乱码。
如果仅是导出csv文本文件而不用excel打开,只需设置charset与数据库一致即可。
另:在linux系统中,Oracle 数据库编码相关问题
需要检查ssh客户端、服务器环境变量 lang nls_lang 以及数据库的编码设置。
注:如发现错误请评论中指出,以免误导他人。
参考资料:
1、http://blog.itpub.net/29357786/viewspace-1420897/