登陆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进行转码即可。针对这两客户端显示不一致的问题,暂时还没找到原因,找到原因再更吧。。。