Oracle存储中文生僻字:Navicat客户端不乱码而Developer显示乱码

登陆Oracle数据库,这里用SecureCRT,很好用的一个SSH连接工具:
//切换到oracle
su - oracle

//登录sqlplus    
sqlplus /nolog

//连接orcale  
conn xx/xx;(用户名/密码)或者connect /as sysdba;

我们先执行这样一个脚本,创建一个简单的表:

CREATE TABLE test_gu (
id VARCHAR2(50) DEFAULT NULL,
name VARCHAR2(80) DEFAULT NULL ,
age VARCHAR2(50) DEFAULT '0' 
)

然后插入几条数据,注意,是生僻字:

INSERT INTO test_gu VALUES (1, '李䶮', '18');
INSERT INTO test_gu VALUES (2, '李㛃', '19');
INSERT INTO test_gu VALUES (3, '李宁', '20');
INSERT INTO test_gu VALUES (4, '李安', '21');

执行语句:
select * from test_gu发现显示乱码,中文都变成了??,查看服务器端的编码,执行:

select userenv('language') from dual;

结果显示:
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.AL32UTF8

可以看到,Oracle字符集编码是AL32UTF8,所以不支持中文显示,如果要能够显示中文,那么需要我们修改其字符集为CHINESE_CHINA.ZHS16GBK,这个网上有很多解决办法。其实我们不更改编码集也可以,因为这不影响我们程序正常的增删改查,而且如果要查看Oracle数据库,我们可以选择客户端工具:
1、Navicat Premium客户端工具
提取链接: https://pan.baidu.com/s/12_kU6h3fkpbA5kBgMB_0_A 提取码: 2i6e
下载该软件,解压即可使用(免安装),连接Oracle的时候,需要增加这一个操作:工具>选项>OCI>OCI library(oci.dll) 引入oci.dll文件,该文件在解压目录:Navicat Premium\instantclient_10_2文件夹内。

2、PLSQL Developer客户端工具

使用客户端工具的过程中,我发现一个问题,使用navicat查询,显示不乱码:
在这里插入图片描述
但是使用Developer工具,只是字乱码,而且不是?,很奇怪有木有:
在这里插入图片描述
我把查询结果复制到txt文本,结果就成了这样:

1	李?	18
2	李?	19
3	李宁	20
4	李安	21

看到这,真的有点哭笑不得,某些输入法无法打出这种生僻字,这种生僻字个人大都百度先查该字念什么,然后百度复制到txt文档,另存为的时候采用UTF-8编码,这样的文本复制到其他地方打开,同样能够正常显示。所以,使用Developer复制出来的文本,就跟该客户端采用的字符集编码有关了。那么,如何查看该客户端采用什么字符集编码呢?执行如下SQL:

select * from nls_instance_parameters where parameter='NLS_LANGUAGE';

//结果如下
PARAMETER		VALUE
NLS_LANGUAGE	AMERICAN

然后把该句拿到Navicat客户端执行,结果是一样的,可是为什么两者显示有如此大区别呢?而且navicat复制出来的结果,粘贴到txt,能正常显示,不过要采用UTF8编码另存:
在这里插入图片描述
我们都知道,某些中文生僻字,是没有ANSI码的,我们只能用Unicode编码工具,找到该中文对应的Unicode码进行存储,读取时候再对该Unicode进行转码即可。针对这两客户端显示不一致的问题,暂时还没找到原因,找到原因再更吧。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值