某組服務器上的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