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

前端之家收集整理的这篇文章主要介绍了ORACLE - sqlplus查询oracle数据库返回结果为“?”或者乱码问题解决前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一、介绍:


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

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


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

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

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


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

select userenv('language') from dual;


!:由上面可以看到此时的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 server和oracle client均为utf-8,而dos的编码为 gbk,结果显示乱码,且乱码为“涓滆帪”;

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

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

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


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

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

猜你在找的Oracle相关文章