某组服务器上的sqlplus在执行定时更新SQL脚本时,中文出现乱码。一开始找错了问题方向:从SQL更新脚本处理的源头开始,首先对windows下的编辑器生成的脚本文件作各类编码的尝试,而后又在vi编辑器里面进行字符编码(encoding)与文件编码(fileencoding)的各类调试。后来发现转了圈,不过并不算浪费时间,最起码对字符编码多了一些了解。html
我是经过以下的方法解决sqlplus执行SQL脚本出现的中文乱码问题:sql
1.生产环境中的字符集全是UTF8,因此对于上传至服务器上的脚本都以'UTF8 without BOM'保存 shell
2.查看Oracle的字符集编码:vim
SQL> select userenv('language') from dual; USERENV('LANGUAGE') ---------------------------------------------------- AMERICAN_AMERICA.AL32UTF8 SQL>
3.修改Linux的NLS_LANG环境变量,修改Oracle指定的Linux用户下面“.base_profile”文件,加入以下:windows
export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
4.执行.bash_profile,使环境变量设置生效,查看其值:bash
$ echo $NLS_LANG AMERICAN_AMERICA.AL32UTF8
至此,这次中文乱码的问题得已解决。服务器
推荐一篇文章,是介绍Vim 中与编码有关的四个选项的,如不是很清楚它们之间关系的能够访问如下网址读一下:编辑器
http://edyfox.codecarver.org/html/vim_fileencodings_detection.html 编码
参考来源:.net
http://edyfox.codecarver.org/html/vim_fileencodings_detection.html
http://www.zfanw.com/blog/vim-encoding-fileencoding-fileencodings.html