QT5中使用QODBC连接oracle数据库 读取字段中文乱码的问题

Qt连接达梦数据库(通过QODBC) 为了省事我的数据源名称和达梦数据库实例保持一致。 阅读详情

最近一个项目需要连接一个比较老的oracle数据库,数据库编码方式是SIMPLIFIED CHINESE_CHINA.ZHS16CGB231280,也就是GBK编码。我的系统环境是QT5.6.3+MINGW4.9.2 32bit+ win7 64位系统。

安装完oracle10g客户端,用odbcad32.exe使用系统自带Microsoft ODBC driver for oracle驱动或oracle in oraclient10g_home1 驱动(均一样的效果)配置好ODBC数据源,利用本机的plsql和sqlplus登陆,查询中文均正常显示。目前oracle服务端和客户端编码均一致,且均可正常显示中文。

使用QT5.6.3(源码UTF-8) MINGW编译程序利用QSqlDatabase借助于QODBC连接到oracle数据库,连接及查询均正常,但是返回值中存在中文时,所有中文均显示为“?”。

代码如下:

QSqlDatabase db=QSqlDatabase::addDatabase("QODBC");

  db.setDatabaseName("test");

  db.setUserName("xxx");

  db.setPassword("xxx");

  if (!db.open()) {

      QMessageBox::information(this,tr("警告"),tr("无法连接数据库"));

      return;

  }

  QSqlQuery query(db);

  query.exec("select vlty_id,vlty_name,vbase from vl_type order by vlty_id");

  QString name;

  int id;

  while (query.next()) {

     id = query.value(0).toInt();

     name = query.value(1).toString();  //读出来是乱码

ui->textBrowser->append(name);

}

name读出是乱码,其实一个gbk编码的QString,相当于如下代码。

QString str1=”中文”;

QString name2=QString(str. toLocal8Bit());

 

数据库取出来的name乱码等同于name2

使用了很多办法进行转码,都不行,有大神可以尝试一下name2转成正常的utf-8中文。查了很多资料,说是QT5中QODBC驱动qsqlodbc.dll qsqlodbcd.dll的bug。

   翻看以前的程序代码发现在QT4中使用vs2005+QT4.5+QODBC可以正确读出数据库中文,到了QT5就是死活不行了。折腾了几天,决定放弃使用QODBC(也许高版本的QT5解决了这个问题,知道的请告诉我),重新编译QOCI驱动后使用QOCI可以正确读取中文,保存数据库中文也均正常。

注:还有个interbase7.5的数据库(也是使用GBK编码),一样使用QODBC读取数据库中文乱码,应该是一样的问题。

QODBC查询Oracle中文乱码问题 解决QODBC操作oracle中文字段乱码的问题 阅读详情

相关推荐

QT通过ODBC远程连接oracle数据库

1、我们知道使用ADO远程连接数据库时,需要在本地安装oracle客户端或者安装整个oracle数据库,并且需要配置本地服务:例如如下: ZZC = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.91.37)(PORT = 1521)) ) (CONNE...

小米的修行之路 2823

(记录)使用QT的Qodbc连接sqlserver2008

1:创建工程,创建时Base Class选择Qwidge,创建号后,点开后缀为.pro的文件,将QT += core gui修改为QT += core gui sql 2:在sql server Management中选择好数据库,右键,新建登陆名gcw 记得要关掉强制密码策略,然后打开这个界面左侧的用户映射现! 先在上面勾选你想要连接的那个数据库,随后还需要勾选下方的这两个 打开状态那一栏,保证是这样的 创建好后,打开ODBC数据源,用windows搜索功能就能找到 点击添加

fdxgcw的博客 1697

Qt连接SQLServer的QODBC驱动

解决QSqlDatabase: QODBC driver not loaded QSqlDatabase: available drivers: QSQLITE问题 解压后放到QtSDK\Desktop\Qt\4.7.4\mingw\plugins\sqldrivers 类似的路径下

qt连接mysql(QODBC)

QODBC怎么用可以去其他地方看看,都不错,我就不再写了,但是qt中的代码我看写的都不太清楚,我肤浅的搞一下。注意odbc和qt以及编译器的位数都要一致!我这是选了mingw64位,之前32位就不行。然后在ui->setupUi(this);先在qt中创建一个项目,我选的mainwindow,在mainwindow中添加头文件。

weixin_74253011的博客 886

Xilinx DMA IP核心配置与实战解析

本文介绍了Xilinx DMA IP核在直接寄存器模式下的配置与工作流程。DMA通过AXI4-Lite接口接收指令,实现内存与数据流之间的高速传输,无需CPU介入。文章详细说明了开发环境配置、IP参数设置(包括地址位宽、数据宽度等关键参数)以及寄存器操作流程。通过仿真分析,展示了读操作中AXI4接口的突发传输机制,包括地址、长度和突发大小的配置。文中还提供了寄存器地址映射表、信号定义等关键信息,为DMA IP核的应用开发提供了实用参考。

weixin_37688766的博客 884

VisualStudio2022配置CGAL

vs2022和vs2017安装配置boost没什么区别,只需要注意boost的msvc得是14.3的,这玩意跟visualstudio版本挂钩的。压缩包解压,得到下面这两文件,然后把auxiliary这个文件挪到CGAL-5.6里面就行了。我用cgal读取一个stl模型,并输出相关信息(想可视化的话需要安装Qt,不想装Qt也可以装VTK)然后下载下面这两个压缩包。照着下面的截图填就完事了。

weixin_43850909的博客 1171

qt读取oracle中文乱码,QT5中使用QODBC连接oracle数据库 读取字段中文乱码的问题

最近一个项目需要连接一个比较老的oracle数据库,数据库编码方式是SIMPLIFIED CHINESE_CHINA.ZHS16CGB231280,也就是GBK编码。我的系统环境是QT5.6.3+MINGW4.9.2 32bit+ win7 64位系统。安装完oracle10g客户端,用odbcad32.exe使用系统自带Microsoft ODBC driver for oracle驱动或ora...

weixin_36285392的博客 649

WRF和WPS安装和编译时遇到的问题

检查是否自己netcdf和Fortran编译器一致。解决办法:修改configure.wps里的路径。如果没问题且wrf已成功编译,考虑重新。path修改为jasper在的路径。

m0_54898744的博客 1837

6.2Qt数据库操作

1. 概述Qt框架中对数据库操作提供了很好的支持,我们可以通过Qt提供的类非常方便地和本地或者远程数据库进行连接。众所周知,数据库是 C-S(client-server)结构的,我们要连接的数据库属于服务器端,通过Qt编写的应用程序属于客户端。如果想用通过Qt访问数据库,首先我们需要在项目中添加数据库模块,模块名为sql。这个sql模块其实对应的就是一个动态库,动态库中有数据库相关类的二进制源码,在使用动态库中的数据库类的时候,动态库被加载到内存,根据程序猿的需求来提供相应的服务。

丰锋的博客 110

最新版 Akamai 逆向 风控破解

经过测试,捷星 jetstar.com,德州仪器 ti.com,w6 wizzair.com,还有一些航空公司的都是可以实现一个并发的有需要的可以。

m0_72605044的博客 6618

基于STM32L4XX、HAL库的ESP32-S3-WROOM-1-N4 WIFI模块驱动程序设计

/ 检查是否收到完整的一行(以\r\n结尾)// 例如: 解析AT命令响应或MQTT消息等。// UART2初始化已在CubeMX中配置。// USART2初始化函数(由CubeMX生成)// 缓冲区溢出,重置。// 如果需要等待响应。// 处理接收到的数据。// 处理接收到的数据。// 等待ESP32模块启动。// 主循环其他任务。// 启用UART全局中断。// 发送HTTP GET请求。// 发送AT测试命令。// 连接Wi-Fi。// UART中断回调函数。

zhusl6688的博客 286

SQL Server学习记忆——编译SQL Server驱动 QODBC(四)

前言前面铺垫了很久,今天终于要利用Qt库连接SQL Server 2008 了。但是发现Qt5.6.0不具有QODBC驱动,因此使用此驱动需要根据自己的编译器版本自行编译,博客中详细介绍了如何利用VS2013编译64位的Qt5.6的QODBC驱动,其它版本过程类似。

wokaowokaowokao12345的专栏 4033

YOLOv12改进策略【Neck】| 使用CARAFE轻量级通用上采样算子

CARAFE内容感知的特征重新组合。

Limiiiing的博客 664

QT 5.13 使用MySQL数据库,含MYSQL安装和QT驱动安装及错误讲解、以及QMYSQL和QODBC两种连接方式以及常用指令,(非常全面了)

本文讲述了MySQL数据库的安装与QT的连接测试,并记录了我测试过程中遇到的几个错误的解决方法,且包括了QT中mysql的驱动安装。

Running_A的博客 6143

网络攻防——kali操作系统基本使用

主要介绍如何搭建kali虚拟机,然后介绍了一个简单的攻击方法,切记,网络恶意攻击属于违法行为

weixin_46560512的博客 2万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

QSQLITE QODBC QODBC3 QPSQL QPSQL7这些分别是什么?

是 Qt 中用于连接使用 ODBC(Open Database Connectivity)标准的数据库的驱动程序。选择适当的驱动程序取决于你的应用程序所需连接的数据库类型以及你的项目需求。:与 QODBC 类似,是 Qt 中用于连接使用 ODBC 标准的数据库的驱动程序。:是 Qt 中用于连接 PostgreSQL 数据库的驱动程序。:与 QPSQL 类似,是 Qt 中用于连接 PostgreSQL 数据库的驱动程序。这些是数据库驱动程序的名称,用于在 Qt 中连接不同类型的数据库。

m0_61629312的博客 1243

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

创建QODBC数据库连接以及增删改查操作

databasemanager.cpp /************************************************* Copyright (C), 2017-2019, Com-Way Tech. Co., Ltd. File name: DataBaseManager.cpp// 文件名 Author: V1.0//Version: Date: admin_lc / guest_wxm // 作者、版本及完成日

caicai_xiaobai的博客 332

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

关于Qt数据库相关开发的一些经验总结

一、数据库开发经验总结 在数据库相关的应用中,如果仅仅是单机版本,没有特别的需要(比如领导指定,或者需要远程存放数据),强烈建议使用sqlite数据库,这是本人经过无数次的对比测试和N个商业项目应用得出的结论。 Qt天生内置了sqlite数据库,只需要发布的时候带上插件就行(可以看到插件动态库文件比其他几种都要大,那是因为直接将数据库的源码都编译进去了,而其他只编译了中间通信交互的插件源码),其他数据库要么还要带上动态库,要么还需要创建数据源; 速度上,绝对无与伦比的出类拔萃,同样的数据库结构(表结构、索

Qt/C++视频监控/推流/物联网/大屏系统/自定义控件/UI定制/输入法 5362

Qt 中 QSQLITE 和 QODBC 数据库连接的区别

两种方式最后都需要正确关闭连接,但QODBC通常需要更仔细的资源管理。

thing 869

【转】QT中使用MYSQL中文乱码解决方法

  【转】QT中使用MYSQL中文乱码解决方法       Linux下乱码解决办法: 1.在QT程序的main.cpp的main函数中添加红色字那三句: int main(int argc, char *argv[]){    QApplication a(argc, argv);   QTextCodec *codec = QTextCodec::codecForNa...

qimo601的专栏 910

qt中解决QString中文乱码的问题

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

GeomasterYi的博客 7059

QOdbc 读写 excel

QOdbc 读写 excel

Fchentianbao的专栏 3295

qt读取oracle中文乱码,windows下Qt通过odbc连接Oracle中文乱码解决

1、问题Qt使用odbc连接oracle数据库,如果字段中有中文数据,查询出来以后是乱码2、环境Qt5.8.0 + vs2015Oracle11G 数据库编码格式ZHS16GBK(在windows下安装的数据库服务,即创建数据库的时候使用默认编码)3、解决方法(1)方法一:修改注册表regedit 打开注册表编辑,找到项目HKEY_LOCAL_MACHINE -> SOFTWARE -&g...

weixin_39765290的博客 1224
上一篇: pyqt5的QCombobox添加checkbox功能
下一篇: QT5环境编译Oracle数据库QOCI驱动程序
vample
博客等级 码龄24年 44粉丝 25原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值