当前位置:网站首页 > 数据科学与大数据 > 正文

sqluldr2导出数据中文乱码(sqlplus导出中文乱码)



昨天wait4friend在处理部署脚本的时候遭遇了中文乱码。因为以前一直面对国外客户,所以在处理中文乱码上没啥经验,在运维同事的帮助下,折腾了半天终于搞清楚了状况。

背景如下:在Pl/SQL Dev里面进行存储过程的开发,代码里面有中文信息和注释。在Win下把包导出之后,FTP到Linux端,通过SQL Plus来执行。

遇到的一个问题是,在Linux端看到文件内容里面的中文是乱码。查看之后确认,Win下PL/SQL Dev默认导出的文本是ANSI,还好通过配置可以强制使用UTF8。设置路径如下 Tools –> Preferences –> Files –> Format –> Encoding

image

第二个问题是,这样生成的UTF8文件会包含一个BOM文件头。这是一个不可见的部分,但是SQL Plus会报错。

使用vi看看,有一个<feff>,这就是UTF8的BOM

<feff>create or replace package FXKZ_PKG as
   procedure SEND_SMS_PROC

Linux下的好东西就是多,经过Google,找到一个办法删除BOM

grep -r -l -l $'^xEFxBBxBF' https://www.cnblogs.com/wait4friend/archive/2012/09/29/*.* | xargs sed -i 's/^xEFxBBxBF//g'

第三个问题是,SQL Plus仍然没有正确识别中文,什么情况?查看之后发现原来是没有设置NLS_LANG参数,这个容易,设置为AMERICAN_AMERICA.UTF8

到此,问题得到圆满解决。为了一劳永逸,写一个部署sql的shell脚本。

echo Remove the UTF8 BOM if needed
grep -r -l -l $'^xEFxBBxBF' https://www.cnblogs.com/wait4friend/archive/2012/09/29/*.* | xargs sed -i 's/^xEFxBBxBF//g'
echo .




# in order to read UTF8 chinese in SQLPlus
echo export NLS_LANG=AMERICAN_AMERICA.UTF8
export NLS_LANG=AMERICAN_AMERICA.UTF8
echo .







总结:

  1. 脚本要保存成utf8,最好是utf-8 without BOM
  2. Linux端对含有BOM的文件进行处理,删除BOM信息
  3. 设置NLS_LANG
到此这篇sqluldr2导出数据中文乱码(sqlplus导出中文乱码)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • junit5 springboot 数据库引入(springboot整合junit需要的依赖)2025-07-26 22:09:09
  • st7735s中文数据手册(st7735s中文资料下载)2025-07-26 22:09:09
  • tidb数据库教程(tisidb数据库)2025-07-26 22:09:09
  • druid数据库连接池不释放(druid数据库连接使用超时)2025-07-26 22:09:09
  • 3dtile数据(3dtile数据用超图打开)2025-07-26 22:09:09
  • 全文数据库有哪些(全文数据库有哪些内容)2025-07-26 22:09:09
  • cmip6(Cmip6下载的不同栅格数据如何矫正)2025-07-26 22:09:09
  • 自动驾驶数据安全概念股(自动驾驶 数据安全)2025-07-26 22:09:09
  • 红米手机 数据迁移(红米手机数据迁移到苹果手机怎么操作)2025-07-26 22:09:09
  • 全文数据库什么意思(数据库全文检索是什么意思)2025-07-26 22:09:09
  • 全屏图片