码迷,mamicode.com
首页 > 数据库 > 详细

oracle 数据库插入中文乱码

时间:2019-05-26 18:09:48      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:style   time   lc_all   docke   al32utf8   paper   数据   roo   编码   

一.

查询数据库编码

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

成功

oracle 数据库插入中文乱码

标签:style   time   lc_all   docke   al32utf8   paper   数据   roo   编码   

原文地址:https://www.cnblogs.com/jiangfeilong/p/10926609.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!