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",然后点击确定将属性应用到当前窗口。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值