Oracle数据库中文乱码问题 您所在的位置:网站首页 excel出现乱码斜线 Oracle数据库中文乱码问题

Oracle数据库中文乱码问题

2023-10-17 18:06| 来源: 网络整理| 查看: 265

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

Oracle数据库中文乱码问题 一、乱码出现场景和原因1.乱码场景2.乱码原因 二、解决思路1.先查看客户端和服务端的编码集2. 修改客户端编码集3. 修改服务端编码集(不推荐)

最近刚开始使用oracle,被中文乱码问题折腾的不行。使用公司的远程库就没问题, 换到自己的本地环境使用中文就各种乱码,真是头疼。所幸正巧看到一篇文章,理解后已经完全解决了乱码问题。

https://blog.csdn.net/qq_27361945/article/details/81082176

关于字符、字节和编码问题,也可以从这篇文章中学习到,这里就不再赘述,这里只讲出现问题的场景、原因以及如何进行有效处理后解决乱码问题的

一、乱码出现场景和原因 1.乱码场景

刚安装好的oracle,本地和服务器字符集都是SIMPLIFIED CHINESE_CHINA.ZHS16GBK, 需要把服务器字符集修改为SIMPLIFIED CHINESE_CHINA.AL32UTF8。

之后通过sqlplus和PL/SQL查询出的中文都是乱码。 客户端和服务端统一SIMPLIFIED CHINESE_CHINA.AL32UTF8编码集后, 查询结果的中文正常显示,但无法通过中文进行查询。

2.乱码原因

简单来说,就是oracle客户端有一套编码集,为客户端操作系统字符集;服务端有两套,分别是服务端操作系统字符集和服务端数据库字符集。 我们只需要关心客户端编码集和服务端编码集。

比如: 我们客户端需要使用中文,需要设置成SIMPLIFIED CHINESE_CHINA.ZHS16GBK 而服务端可能要用AL32UTF8 作为字符集,

这里并不要求客户端和服务端的编码集一致,比如一条sql语句从客户端到服务端,会先通过GBK进行解码; 而解码后的内容传入到服务端后,再通过指定的字符集进行编码。

我在客户端编写了一条带中文的SQL语句,或者需要查询出的数据带中文,如果客户端没有使用中文的编码格式就无法正确进行解析, 从而造成乱码。

二、解决思路 1.先查看客户端和服务端的编码集

客户端:

SELECT * FROM V$NLS_PARAMETERS;

服务端

SELECT * FROM NLS_DATABASE_PARAMETERS; 2. 修改客户端编码集

oralce中常用字符集:

AMERICAN_AMERICA.ZHS16GBK

SIMPLIFIED CHINESE_CHINA.ZHS16GBK

SIMPLIFIED CHINESE_CHINA.AL32UTF8

修改客户端编码集有两步:

打开注册表,找到路径:\HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\HOME,下的NLS_LANG修改为需要指定的字符集即可在系统变量中新建:NLS_LANG = 编码集,如AMERICAN_AMERICA.ZHS16GBK 3. 修改服务端编码集(不推荐) 以管理员模式启动cmdsqlplus / as sysdba依次执行 SQL> shutdown immediate SQL> startup mount SQL> alter system enable restricted session; SQL> alter system set job_queue_processes=0; SQL> alter system set aq_tm_processes=0; SQL> alter database open; SQL> alter database character set internal_use AMERICAN_AMERICA.ZHS16GBK; --强制转换,不加internal_use 会报错 SQL> shutdown immediate SQL> startup SQL> select userenv('language') from dual;

修改完成

总结: 把客户端编码集改为GBK,服务端改为UTF8即可解决中文的乱码问题。


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有