在使用xDBC连接到字符集为US7ASCII的Oracle数据库时,大家可能遇到过中文的乱码问题,尤其是使用Oracle自己的xDBC驱动的时候。

字符集为US7ASCII的Oracle数据库虽然可以保存中文数据,但给客户端带来了很多麻烦,需要对获取和提交的数据进行转码。

在Ensemble/Health Connect/InterSystems IRIS 中使用SQL适配器连接到这样的Oracle数据库时,可以使用$ZCVT函数进行转码。

1. $ZCVT函数

$ZCVT函数是广泛使用的字符串转换函数,可以做大小写转换、编码转换、URL 和 URI 转换等。我们用其编码转换能力来解决字符集转码问题。

2. 获取的SQL结果集数据有中文时

这时,Oracle的驱动返回的中文数据通常是GB码,而不是Unicode或UTF码。可以通过$ZCVT函数对GB码的数据进行转码,转换为Unicode:

Set tCorrectData = $ZCVT(tOriginalData,"I","GB18030")

其中$ZCVT函数的第一个参数tOriginalData是获取到到结果集字段值;第二个参数“I”说明tOriginalData是输入字符串;第三个参数“GB18030”是说明输入字符串的字符集编码是GB18030。

上面的代码会将tOriginalValue按GB18030编码转换为Unicode编码,并将转换结果赋给变量tCorrectData。

3. 发送中文数据或中文查询条件时

首先,需要将本地Unicode的中文数据转码为GB码。还是使用$ZCVT函数:

Set tSendingData = $ZCVT(tOriginalData,"O","GB18030")

其中$ZCVT函数的第一个参数tOriginalData是输出的含中文数据;第二个参数“O”说明要转换输出数据;第三个参数“GB18030”是说明输出时要转换为GB18030。

上面的代码会将tOriginalValue按Unicode编码转换为GB18030编码,并将转换结果赋给变量tSendingData。

做完这一步,Oracle驱动很可能依然不认识其中的GB码中文数据。这时,需要将GB码的中文数据转换成GB明码字符串,例如你要将查询条件 中文 传给Oracle,你需要传递 D6D0CEC4过去(中的GB码为D6D0,文的GB码为CEC4),然后再使用Oracle的函数UTL_RAW.CAST_TO_VARCHAR2,将GB明码字符串转为内部使用的中文数据。所以修改后代码如下:

Set tSendingData = $ZCVT(tOriginalData,"O","GB18030")
    Set tTmpDataHex = ""
    //转换为GB明码   
    For i=1:1:$length(tSendingData) 
    {
          Set tTmpDataHex = tTmpDataHex_$zhex($ASCII(tSendingData,i))
    }   
   //使用Oracle的UTL_RAW.CAST_TO_VARCHAR2的函数
   Set tSQL = "update dept_dict set dept_name = UTL_RAW.CAST_TO_VARCHAR2('"_ tTmpDataHex_"') where dept_code = '1'"

这里用到了$ZHEX和$ASCII函数,将数据转换为其编码,并转为16进制值,从而得到GB明码。关于更多的Ensemble/Health Connect/InterSystems IRIS函数,可以参考文档。$ASCII函数,将数据转换为其编码,并转为16进制值,从而得到GB明码。关于更多的Ensemble/Health Connect/InterSystems IRIS函数,可以参考文档。文档。

自此,应该可以解决从Ensemble和Health Connect连接到字符集为US7ASCII的Oracle数据库所遇到的各种中文乱码问题了。

如果您遇到更多的问题,欢迎在社区提问。

解决SQL适配器连接到字符集为US7ASCII的Oracle数据库的中文乱码问题相关推荐

  1. python读取oracle数据库中文乱码_PL/SQL连接Oracle数据库,中文乱码,显示问号

    PL/SQL连接oracle数据库 1.简单介绍 在不安装oracle数据库的情况下使用pl/sql连接远程oracle数据库. 2.详细步骤: a)      安装PL/SQL.依据自己的操作系统安 ...

  2. ORACLE字符集为US7ASCII,插入数据,中文乱码问题解决

    1.可以通过select * from nls_database_parameters where parameter ='NLS_CHARACTERSET';查到ORACLE的字符集 US7ASCI ...

  3. oracle数据库表中文乱码,oracle数据库中文乱码的原因与解决

    资料: 很久以来,字符集一直是困扰着众多Oracle爱好者的问题,在此我们就这个问题做一些分析和探讨. 首先,我们要明确什么是字符集?字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包括关系 ...

  4. oracle 导入sql文件 汉字乱码_将现有的sql脚本导入 Oracle 数据库,中文乱码问题...

    将现有的sql 脚本导入 Oracle数据库 比如 在windows 系统下,可以写一个 bat 来实现直接导入 如:bat 中的内容如下,logs.log 将会记录执行日志 sqlplus user ...

  5. jdbc连接字符集为us7ascii的oracle数据库乱码解决办法

    原文地址:http://www.databaseskill.com/2247741/ 我的jsp编码是utf-8,数据库oracle用的编码是us7ascii,在使用weblogic8的时候,使用在网 ...

  6. hibernate插入Mysql数据库出现中文乱码情况从这5个方面解决

    因为有了新电脑所以又要解决乱码问题,在网上找帖子很是头疼,还是自己总结一下比较好. hibernate插入Mysql数据库出现中文乱码情况从这几个方面解决:有了这几方面以后使用mysql的乱码问题就不 ...

  7. phalcon: 解决php7/phalcon3.2以上版本,不支持oracle数据库的方法

    phalcon: 解决php7/phalcon3.2以上版本,不支持oracle数据库的方法 参考文章: (1)phalcon: 解决php7/phalcon3.2以上版本,不支持oracle数据库的 ...

  8. 成功解决利用pandas的read_csv函数读取csv文件的时候出现中文乱码问题

    成功解决利用pandas的read_csv函数读取csv文件的时候出现中文乱码问题 目录 解决问题 解决思路 解决方法 解决问题 利用pandas的read_csv函数读取csv文件的时候出现中文乱码 ...

  9. 解决在Linux下安装Oracle时的中文乱码问题

    解决在Linux下安装Oracle时的中文乱码问题 参考文章: (1)解决在Linux下安装Oracle时的中文乱码问题 (2)https://www.cnblogs.com/qiumingcheng ...

最新文章

  1. 用CSS 给网页装潢[3] -构造文本
  2. how you can do to make girls more close to you?
  3. noip2017考前整理(未完)
  4. UITableView从storyBoard加载UITableViewCell的细节以及布局内边距问题
  5. windows10 C盘清理
  6. 在线教育如何应对流量洪峰?阿里云专家:上云+云数据库是最佳路径
  7. Netty的ChannelFuture和ChannelPromise
  8. 学习了解online hard example mining在线难例挖掘
  9. C++难吗?好学吗?C++到底怎么样?
  10. excel删除行 uipath_工作再忙,也要学会这10个最经典的Excel小技巧
  11. Javascript从零开始学习第一天
  12. Scrapy基础(八)————图片下载后将本地路径添加到Item中
  13. pcfg 自然语言处理_自然语言处理:原理简明教程09-句法分析,语义分析和篇章分析...
  14. 绿色到黄色到红色的颜色渐变实现
  15. SAP 消息号 KE391:在 CO-PA中分配条件类型PR00的问题
  16. 网页视频改变加速倍数的方法
  17. ESP32文件系统esp_littlefs实例
  18. nginx 代理 负载均衡 网站转接的用法
  19. 【人工智能】AI竞赛,到底有什么价值?
  20. 领英动态和文章如何发布才能更好的带来询盘?

热门文章

  1. 我在用的翻译软件,微软翻译,网易有道词典
  2. 一篇很完整的元器件选型指南
  3. 2021年起重机司机(限桥式起重机)免费试题及起重机司机(限桥式起重机)试题及解析
  4. 采用CAD刀模插件(飞狼刀模工具箱)批理倒圆角
  5. php图片是啥,PHP图片操作
  6. python分析qq好友_Python2.7获取QQ空间部分好友
  7. Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.Gener
  8. Ubuntu16.04安装有道词典
  9. http://blog.csdn.net/cs_lht?viewmode=contents
  10. 使用docker急速搭建Oracle测试环境(完全离线)