下面我来介绍关于Orace查询数据出现乱码问题分析与最后乱码的解决办法,有需要学习的朋友可参考参考。
问题描述:
经常有些朋友会遇到,我明明是输入的正确中文,为什么我在另外一台电脑上查询却出现乱码啦?其实这个是数据库在进行字符集转换的时候出现了问题,
下面通过测试来描述具体的情况:
1.环境
Oracle 数据库字符集:
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as scott
SQL> SELECT * FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'NLS_CHARACTERSET';
PROPERTY_NAME PROPERTY_VALUE DESCRIPTION
------------------------------ -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
NLS_CHARACTERSET ZHS16GBK Character set
Oracle 数据库所在的客服端字符集:
在注册表的:NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK 如下图:
Oracle 所在的操作系统的字符集:
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:UsersAndy>chcp
活动代码页: 936
表示是:中国 - 简体中文(GB2312)
2.测试
字符集如下:
Oracle 数据库字符集:ZHS16GBK
Oracle 数据库客户端字符集:ZHS16GBK
操作系统字符集:中国 - 简体中文(GB2312)
输入测试数据:
SQL> INSERT INTO TAB_INDX
2 values(1,'汉字输入字符集测试','Chinese Input Test',sysdate);
1 row inserted
字符集不修改,进行测试数据现实:
SQL> select * from tab_indx where tid = 1;
TID TNAME TDESC SYSDT
---------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -----------
1 汉字输入字符集测试 Chinese Input Test 2012/12/30
显示正常,
现在我把客服端的字符集修改为:UTF8
及注册表的:NLS_LANG=SIMPLIFIED CHINESE_CHINA.UTF8
现在字符集如下:
Oracle 数据库字符集:ZHS16GBK
Oracle 数据库客户端字符集:UTF8
操作系统字符集:中国 - 简体中文(GB2312)
现在再查询刚才输入的数据:
SQL> select tname,tdesc from tab_indx;
TNAME TDESC
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
姹?瀛?杈??ュ?绗﹂??娴?璇? Chinese Input Test
发现查询出来的数据已经不能正常现实,因为这些汉字是以ZHS16GBK编码格式存储的,然而你查询出来后根据Oracle客服端的编码(UTF8)转换,及转成了UTF8的编码格式,但是操作系统是简体中文(GB2312),所以操作系统就把UTF8编码格式的数据,当成简体中文(GB2312)的编码格式数据显示,结果就出现了乱码,
现在我再插入一笔数据:
SQL> INSERT INTO TAB_INDX
2 values(1,'UTF8下汉字输入字符集测试','Chinese Input Test',sysdate);
1 row inserted
再查询:
SQL> select tname,tdesc from tab_indx;
TNAME TDESC
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
姹?瀛?杈??ュ?绗﹂??娴?璇? Chinese Input Test
UTF8锛??锛?锛?锛?锛??????锛? Chinese Input Test
发现新插入的数据也出现了乱码,但是乱码跟刚才的值不一样??为什么呢?
因为输入的汉字,是简体中文(GB2312)的编码格式,当Oracle数据库按照客户端的编码格式传给数据库,Oracle数据库发现,Oracle数据库客户端是UTF8的编码格式,跟数据库的编码格式(ZHS16GBK)不一样,就进行字符集转换,UTF8-->ZHS16GBK,所以把简体中文(GB2312)的编码格式的数据当成UTF8,转为ZHS16GBK的编码格式数据,就已经出错啦,查询出来自然转换回去就不行啦
(本来需要测试Oracle数据库的字符集修改后的情况,这种情况暂时不测试)这里我们在把Oracle客户的字符集修改回去;
在注册表的:NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
现在字符集如下:
Oracle 数据库字符集:ZHS16GBK
Oracle 数据库客户端字符集:ZHS16GBK
操作系统字符集:中国 - 简体中文(GB2312)
再查询:
SQL> select tname,tdesc from tab_indx;
TNAME TDESC
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
汉字输入字符集测试 Chinese Input Test
UTF8????????????? Chinese Input Test
发现最开始输入的汉字正常啦,但是第二次输入的汉字,又变了,跟上次的乱码不一样????
虽然这里没有进行编码格式转换,但是上次在存数据的时候,已经是存的错误的编码格式,所以显示出来肯定不正确
其实还有好几种情况测试,由于本地环境的限制,所以测试的其它情况,大家可以去试试,如:数据库的字符集是UTF8,然后客服端的字符集变化,对汉字的输入输出有什么影响
根据上面的测试情况和我自己的分析,现在总结如下:
1.数据库的查询出来的数据,是Oracle数据库字符集,Oracle客户端字符集,操作系统字符集共同作用的结果。
2.Oracle存数据和查询数据都是通过Oracle数据库的字符集和Oracle客服端的字符集进行转换的,显示数据又是根据操作系统的字符集来确定的。
3.为了避免出现乱码必须要把Oracle客户端的字符集和操作系统的字符集设置成一样的。

本文探討了Docker中的優化MySQL內存使用量。 它討論了監視技術(Docker統計,性能架構,外部工具)和配置策略。 其中包括Docker內存限制,交換和cgroups

本文介紹了MySQL的“無法打開共享庫”錯誤。 該問題源於MySQL無法找到必要的共享庫(.SO/.DLL文件)。解決方案涉及通過系統軟件包M驗證庫安裝

本文討論了使用MySQL的Alter Table語句修改表,包括添加/刪除列,重命名表/列以及更改列數據類型。

本文比較使用/不使用PhpMyAdmin的Podman容器直接在Linux上安裝MySQL。 它詳細介紹了每種方法的安裝步驟,強調了Podman在孤立,可移植性和可重複性方面的優勢,還

本文提供了SQLite的全面概述,SQLite是一個獨立的,無服務器的關係數據庫。 它詳細介紹了SQLite的優勢(簡單,可移植性,易用性)和缺點(並發限制,可伸縮性挑戰)。 c

文章討論了為MySQL配置SSL/TLS加密,包括證書生成和驗證。主要問題是使用自簽名證書的安全含義。[角色計數:159]

本指南展示了使用自製在MacOS上安裝和管理多個MySQL版本。 它強調使用自製裝置隔離安裝,以防止衝突。 本文詳細詳細介紹了安裝,起始/停止服務和最佳PRA

文章討論了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比較了它們對初學者和高級用戶的功能和適合性。[159個字符]


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Dreamweaver Mac版
視覺化網頁開發工具

記事本++7.3.1
好用且免費的程式碼編輯器

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器