oracle 数据库插入中文乱码

Posted jiangfeilong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 数据库插入中文乱码相关的知识,希望对你有一定的参考价值。

一.

查询数据库编码

select userenv(language) from dual;

查询服务器编码

select * from v$nls_parameters;

推出sql查询系统编码

[email protected]:/# 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

[email protected]:/#  export LANG=zh_CN.UTF-8
[email protected]:/# 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 数据库插入中文乱码的主要内容,如果未能解决你的问题,请参考以下文章

oracle 数据库插入中文乱码

oracle 插入中文查询显示乱码,问号是啥原因

PHP插入数据到数据库出中,中文出现乱码~~全是问号

oracle插入中文乱码

在oracle数据库中插入的冷僻字都会变成问号,这个怎么解决。

oracle中文乱码问题