ORACLE - sqlplus查询oracle数据库返回结果为“?”或者乱码问题解决

时间:2022-09-16 17:58:45

一、介绍:


           1、Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索

数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。


 2、如何查询Oracle的字符集
ORACLE有三方面的字符集,一是oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。在做数据导入的时候,需要这三个字符集都一致才能正确导入。

2.1--查看当前DOS输出字符集
chcp --查看当前DOS编码集

chcp 代码页 --修改当前DOS编码集

ORACLE - sqlplus查询oracle数据库返回结果为“?”或者乱码问题解决

2.2 --查看oracle server端的字符集(这个是最终显示的字符集)

select userenv('language') from dual;

ORACLE - sqlplus查询oracle数据库返回结果为“?”或者乱码问题解决

!:由上面可以看到此时的Oracle服务端的编码集为:chinese_china.AL32UTF8;(utf-8)

而我们的DOS的编码集为:GBK Supports Simplified Chinese(支持简体中文的GBK)(活动代码页 936)

发生乱码,且为 “?”。

在这里给出 代码页 对应的编码集

    * 437 — The original IBM PC code page
* 932 — Supports Japanese
* 936 — GBK Supports Simplified Chinese
* 949 — Supports Korean
* 950 — Supports Traditional Chinese
* 1200 — UTF-16LE Unicode little-endian
* 1201 — UTF-16BE Unicode big-endian
* 65000 — UTF-7 Unicode
* 65001 — UTF-8 Unicode
* 10000 — Macintosh Roman encoding (followed by several other Mac character sets)
* 10007 — Macintosh Cyrillic encoding
* 10029 — Macintosh Central European encoding
* 20127 — US-ASCII The classic US 7 bit character set with no char larger than 127
* 28591 — ISO-8859-1 (followed by ISO-8859-2 to ISO-8859-15)

2.3 -- 设置Oracle client端的字符集让其与Oracle server端一致

从上面的操作我们可以看到oracle server端的编码集为 utf-8,我们也把 oracle client端设置为utf-8)

进入当前用户下,执行:

set NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8

或者

set NLS_LANG=american_america.AL32UTF8

此时我们再进入sqlplus看一下中文的显示情况:

ORACLE - sqlplus查询oracle数据库返回结果为“?”或者乱码问题解决

从上面可以看出当 oracle server和oracle client均为utf-8,而dos的编码为 gbk,结果显示乱码,且乱码为“涓滆帪”;

这应该是utf-8编码 转到gbk编码是发生的乱码!。

2.4 --将 DOS 编码集设置为 oracle 两端一致的编码集 utf-8,也就是代码页:65001

再次sqlplus,并查询数据,结果如下:

ORACLE - sqlplus查询oracle数据库返回结果为“?”或者乱码问题解决

这时发现还是乱码,不急我们要修改窗口属性,改变字体

在命令行标题栏上点击右键,选择"属性"->"字体",将字体修改为True Type字体"Lucida Console",然后点击确定将属性应用到当前窗口。

ORACLE - sqlplus查询oracle数据库返回结果为“?”或者乱码问题解决