本文发布于Cylon的收藏册,转载请著名原文链接~
运行环境
服务器:centos6.8
服务器oracle版本:oracle 11g R2 64位,字符集是ZHS32utf8。
客户端:navicat 12x64 windows8.1x64
问题分析
当在windows客户端使用sqlplus或navicat时如果数据库中文显示“????”
这种情况是在客户端与服务器端字符集不一致时,从客户端输入了汉字信息。输入的这些信息即便是把客户端字符集更改正确,也无法显示汉字。
解决方法:退出sqlplus,设置相应的环境变量NLS_LANG
linux:
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
windows:
出现问题
此时。系统cmd命令行使用sqlplus已经正常显示中文,但是navicat中依旧是????
图为cmd命令行访问sqlplus客户端查询
图为navicat f6弹出的sqlplus客户端
原因是因为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
将下载的文件解压覆盖navicat中的instantclient目录里的文件。
此时连接oracle实例提示如下信息
尽管我们下载了64位的版本。却提示如图信息。这是因为Navicat仅支持32位的,因此还需下载一个32位的客户端。替换到instantclient目录中
替换完成后连接实例。f6使用sqlplus查询发现中文已经正常显示
本文发布于Cylon的收藏册,转载请著名原文链接~
链接:https://www.oomkill.com/2018/04/sqlplus-windows/
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」 许可协议进行许可。