本文发布于Cylon的收藏册,转载请著名原文链接~


运行环境

服务器:centos6.8

服务器oracle版本:oracle 11g R2 64位,字符集是ZHS32utf8。

客户端:navicat 12x64 windows8.1x64

问题分析

当在windows客户端使用sqlplus或navicat时如果数据库中文显示“????”

这种情况是在客户端与服务器端字符集不一致时,从客户端输入了汉字信息。输入的这些信息即便是把客户端字符集更改正确,也无法显示汉字。

img

img

解决方法:退出sqlplus,设置相应的环境变量NLS_LANG

linux:

export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK" 

windows:

img

出现问题

此时。系统cmd命令行使用sqlplus已经正常显示中文,但是navicat中依旧是????

图为cmd命令行访问sqlplus客户端查询

img

图为navicat f6弹出的sqlplus客户端

img

原因是因为Navicat Premium默认自带的instant client,但是其是base lite版本的(Basic Lite: Basic 的精简版本,其中仅带有英文错误消息和 Unicode、ASCII 以及西欧字符集支持),不支持中文字符集,而本文中的服务器端oracle恰好是中文字符集。自带版本不支持。此处需要去oracle官网下载相对应的版本。

http://www.oracle.com/technetwork/database/database-technologies/instant-client/downloads/index.html

img

将下载的文件解压覆盖navicat中的instantclient目录里的文件。

此时连接oracle实例提示如下信息

img

尽管我们下载了64位的版本。却提示如图信息。这是因为Navicat仅支持32位的,因此还需下载一个32位的客户端。替换到instantclient目录中

替换完成后连接实例。f6使用sqlplus查询发现中文已经正常显示

img

本文发布于Cylon的收藏册,转载请著名原文链接~

链接:https://www.oomkill.com/2018/04/sqlplus-windows/

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」 许可协议进行许可。