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

sqluldr2导出数据中文乱码(sqlplus导出中文乱码)nbsp 昨天 wait4friend 在处理部署脚本的时候遭遇了中文乱码 因为以前一直面对国外客户 所以在处理中文乱码上没啥经验 在运维同事的帮助下 折腾了半天终于搞清楚了状况 nbsp 背景如下 在 Pl SQL Dev 里面进行存储过程的开发 代码里面有中文信息和注释 在 Win 下把包导出之后 FTP 到 Linux 端 通过 SQL Plus 来执行 amp

大家好,我是讯享网,很高兴认识大家。



 

昨天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会报错。

SQL> @FXKZ_PKG.pks
SP2-0734: unknown command beginning “create …” - rest of line ignored.
  procedure SEND_SMS_PROC
  *
ERROR at line 1:
ORA-00900: invalid SQL statement

使用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'</p> <p>&nbsp;</p> <p><strong>第三个问题</strong>是,SQL Plus仍然没有正确识别中文,什么情况?查看之后发现原来是没有设置NLS_LANG参数,这个容易,设置为AMERICAN_AMERICA.UTF8</p> <p>&nbsp;</p> <p>到此,问题得到圆满解决。为了一劳永逸,写一个部署sql的shell脚本。</p> <p><font color="#0000ff">echo Remove the UTF8 BOM if needed <br>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 .


echo Executing FXKZ_PKG.pks
sqlplus -L -S \(SCHEMA_NAME/\)SCHEMA_PWD@$TNSNAME @FXKZ_PKG.pks
echo .

&nbsp;

总结:

  1. 脚本要保存成utf8,最好是utf-8 without BOM
  2. Linux端对含有BOM的文件进行处理,删除BOM信息
  3. 设置NLS_LANG

小讯
上一篇 2025-05-02 20:38
下一篇 2025-05-25 20:27

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/186552.html