一.
查詢數據庫編碼
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
成功