oracle中文乱码

在自己的电脑(Windows 7 简体中文)上编写的插入数据的SQL脚本(内容大致如下)

放到Oracle数据库(Linux系统)执行后发现插入的中文乱码

使用PL/SQL Developer连接查询也是乱码

解决方法:

自己的电脑的字符集是

安装的Oracle客户端也显示是SIMPLIFIED CHINESE_CHINA.ZHS16GBK

(打开注册表,'开始'-'运行' 输入'regedit'-确定。找到如下路径,

HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_OraClient12Home1)

使用UltraEdit工具打开脚本也可以看到脚本字符集

所以在自己的电脑的脚本保存时默认是ZHS16GBK.

查询数据库的字符集

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

USERENV('LANGUAGE')

----------------------------------------------------

AMERICAN_AMERICA.AL32UTF8

数据库的字符集是AMERICAN_AMERICA.AL32UTF8

所以数据中的中文插入后乱码

可以使用如下方法:

1--------在PL/SQL Developer工具上执行插入语句。但是数据量过多时执行速度很慢很慢

2--------在数据库服务器(Linux系统)上为数据库指定的Linux用户(这里是oracle

暂时修改NLS_LANG环境变量export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"

[oracle@oracle11gr203db ~]$ export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"

[oracle@oracle11gr203db ~]$ sqlplus scott/scott

SQL*Plus: Release 11.2.0.3.0 Production on Tue Mar 21 17:58:27 2017

Copyright (c) 1982, 2011, Oracle. All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

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

USERENV('LANGUAGE')

--------------------------------------------------------------------------------

AMERICAN_AMERICA.AL32UTF8

此时执行字符集为ZHS16GBK的脚本并提交数据。但是服务器上查询是需要将 NLS_LANG环境变量修改为:export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"

[oracle@oracle11gr203db ~]$ export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"

[oracle@oracle11gr203db ~]$ echo $NLS_LANG

AMERICAN_AMERICA.AL32UTF8

[oracle@oracle11gr203db ~]$

也可以使用PL/SQL Developer等其他工具远程查询.

3--------在自己的电脑上将脚本保存是选utf-8字符集,这里我使用UltraEdit工具保存脚本

然后将脚本放到服务器上并将 NLS_LANG环境变量修改为:

export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"

此时执行字符集为UTF8的脚本并提交数据。

在服务器上查询是需要将 NLS_LANG环境变量修改为:

export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"

[oracle@oracle11gr203db ~]$ export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"

[oracle@oracle11gr203db ~]$ echo $NLS_LANG

AMERICAN_AMERICA.AL32UTF8

[oracle@oracle11gr203db ~]$

同样,也可以使用PL/SQL Developer等其他工具远程查询.

注意:这里在保存脚本为utf-8字符集是有两种,一般建议选择无BOM的,

有BOM的脚本第一行会报错,无BOM的不会出现(仅限安装在Linux上的oracle数据库)

  

所以一定要声明NLS_LANG环境变量(一般与操作系统有关)

相关命令

AMERICAN_AMERICA.AL32UTF8

echo $NLS_LANG

export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"

export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"

sqlplus scott/scott

参考文档

查看windows 系统字符集

http://jingyan.baidu.com/article/3c343ff70e42e70d3679635b.html

Linux系统下Oracle执行SQL脚本后中文出现乱码解决方法

http://blog.csdn.net/zzs0829/article/details/7410264

utf-8和utf-8 +bom 有什么区别?

https://zhidao.baidu.com/question/1988203804217274627.html

如何判断一个文本文件内容的编码格式 UTF-8 ? ANSI(GBK)

http://blog.sina.com.cn/s/blog_4f4f9e6f01019ru7.html

原文地址:https://www.cnblogs.com/hw-1015/p/6600681.html