oracle 數據庫插入中文亂碼


一.

查詢數據庫編碼

select userenv('language') from dual;

查詢服務器編碼

select * from v$nls_parameters;

推出sql查詢系統編碼

root@f096e625bcd3:/# locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

可以看到當前編碼格式為POSIX,而這種編碼格式不支持中文

  解決辦法:locale -a查看容器所有語言環境

  

使用locale -a 查看當前可用的字符集,這里我們看到有C.UTF-8和zn_CN.UTF-8,這兩種字符集都支持中文。如果當前不存在zn_CN.UTF-8,可以使用sudo apt-get -y install language-pack-zh-hans進行安裝。

sudo apt-get -y install language-pack-zh-hans

 

 C.UTF-8可以支持中文,只需要把容器編碼設置為C.UTF-8即可

    1.臨時修改:

     export LANG=zh_CN.UTF-8

root@f096e625bcd3:/#  export LANG=zh_CN.UTF-8
root@f096e625bcd3:/# locale
LANG=zh_CN.UTF-8
LANGUAGE=
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=

    2.永久修改:修改Dockerfile

      在Dockerfile中添加一行

      ENV LANG C.UTF-8

      重新制作docker鏡像,docker run -ti [鏡像] 進入容器后執行locale發現編碼格式已經被修改為C.UTF-8,之前出現的中文文件名亂碼問題也沒有了。

  三. 修改oracle 編碼

1.查看當前數據庫編碼

select userenv('language') from dual;
SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.AL32UTF8

2.查看系統 NLS_LANG

echo $NLS_LANG

設置NLS_LANG

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

成功


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM