QODBC连接oracle中文乱码

首先简单说一下环境:XP+Qt4.8+oracle10g
现象:
1、程序A利用QSqlDatabase借助于QODBC连接到oracle数据库(利用Microsoft ODBC driver for oracle和oracle自带的驱动均一样的效果),连接及查询均正常,但是返回值中存在中文时,所有中文均显示为“?”。
借助于A程序实现入库的时候,入库成功。但是数据库表中中文字段显示为乱码。再用A取得刚才入库的信息时,库表中刚才插入的乱码,
取出来后可以正常显示。
2、利用本机的plsql和sqlplus登陆,查询中文均正常显示。
3、利用VC++6.0+ODBC来访问,中文显示正常。
补充:目前oracle服务端和客户端编码均一致,且均可正常显示中文。目前估计问题可能出现在QODBC的驱动上,恳请各位大神指点!

3个回答

连接字符串,数据库驱动配置中Ruhr处理中文的,配置字符集没

需要配置字符编码,通常这类问题都是这样的,都设置为UTF-8

最后是通过编译QOCI来实现的,谢谢以上各位的解答!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于QODBC的连接问题
本人开发环境windows 7 64bit + vs2010 + Qt4.8尝试使用QODBC连接SQL Server,问题很奇特,数据库已经打开了,但是执行SQL语句时,又提示Driver not loaded,很是困惑,请教是何种原因rn代码如下:rn QStringList ssss = QSqlDatabase::drivers();rn QSqlDatabase db = QSqlDatabase::addDatabase("QODBC", "test");rn db.setHostName("arkis_pc"); rn QString dsn = QString::fromLocal8Bit("DRIVER=SQL SERVER;SERVER=arkis_pc;DATABASE=Arkist_test");rn db.setDatabaseName(dsn);rn db.setUserName("sa"); rn db.setPassword("test");rn bool ok = db.open();rn if(ok)rn rn QMessageBox::information(this,"database","OK,database is opened");rn QSqlQuery query;rn QString s1,s2,s3,s4;rn bool success = query.exec("select * from test");rn if (!success)rn rn QMessageBox::information(this,"database",query.lastError().text());rn rn while(query.next())rn rn s1 =query.value(0).toString();rn ui.lineEdit_1->setText(s1);rn s2 =query.value(1).toString();rn ui.lineEdit_2->setText(s2);rn s3=query.value(2).toString();rn ui.lineEdit_3->setText(s3);rn s4 =query.value(3).toString();rn ui.lineEdit_4->setText(s4);rn QMessageBox::information(this,"database","next recorder");rn rnrn //写数据库rn QString INSERT = QString("INSERT INTO test(id, time, position, people)"rn "VALUES (:id, :time, :position, :people)");rnrn query.prepare(INSERT);rn query.bindValue(0,QString("123") );rn query.bindValue(1,QString("1234") );rn query.bindValue(2,QString("12345") );rn query.bindValue(3,QString("123456") );rnrn bool sss = query.exec();rn rn elsern QMessageBox::information(this,"database","database Failture"); rn db.close();rnrnrn调试结果:ssss [3]("QSQLITE","QODBC3","QODBC") QStringListrn先提示:database is openedrn然后提示:Driver not loaded Driver not loadedrnrnrn输出窗口提示:rn线程 'Win32 线程' (0x1354) 已退出,返回值为 0 (0x0)。rnQSqlQuery::exec: database not openrn线程 'Win32 线程' (0xb74) 已退出,返回值为 0 (0x0)。rn线程 'Win32 线程' (0x1070) 已退出,返回值为 0 (0x0)。rn线程 'Win32 线程' (0x1148) 已退出,返回值为 0 (0x0)。rnQSqlQuery::prepare: database not openrnrnrn
perl连接oracle中文乱码
我的服务器是Solaris 5.8的,oracle 9.2的,perl 5.8的,apache2.1的php 5.1的。mysql 5.0rn出现问题是:rnrnphp连接oracle 插入数据,读取数据一切正常rnperl 连接mysql 插入数据,读取数据一切正常。rnrnperl连接oracle 读取用php插入到oracle中的中文显示为"??"rnperl连接oracle读取用perl插入到oracle中的中文为 “ks_c_5601-1987”这个编码的数据,oracle中也是存储的这样的数据,这些数据是用perl连接oracle插入的。rnrnoracle home下的.profile文件中有这句话:“NLS_LANG=AMERICAN_AMERICA.ZHS16GBK”rnrnSELECT * FROM V$NLS_PARAMETERS 结果是rnNLS_CHARACTERSET ZHS16GBKrnrnSELECT * FROM NLS_DATABASE_PARAMETERS 结果是rn NLS_CHARACTERSET ZHS16GBKrnrn说白了就是perl连接oracle中文有问题。我现在连是oracle的问题还是perl的问题都搞不清,请大师们帮下忙。。谢谢了
asp连接Oracle中文乱码
Oracle客户端和服务器编码都是SIMPLIFIED CHINESE_CHINA.ZHS16GBK,rnasp连接数据库的语句如下。rn Set dbconn = Server.CreateObject("ADODB.Connection")rn dbconn.ConnectionTimeout = 15rn dbconn.CommandTimeout = 30rn dbconn.CursorLocation = 3rn dbconn.Open "Provider=MSDAORA;Data Source=**;User ID=**;Password=**"rnrnasp页面有下面一行:rn rnrn把charset改成UTF-8,数据库查询出来的中文可以正常显示,而为gb2312却显示乱码,实在不明白了。。求高手解答。。rnrn因为页面太多,不可能全改为UTF-8,而且出现乱码只是在部分开发机器上。
plsql连接Oracle中文乱码
win8系统,plsqldev9,Oracle11g 64位,Oracle客户端是 instantclient_11_2。rnrn注册表:NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK;rnrn环境变量:NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK;LANG=zh_CN.GBK; NLS_CHARACTERSET=ZHS16GBK;rnrnsql>select userenv('language') from dual; 查询结果是:SIMPLIFIED CHINESE_CHINA.ZHS16GBKrnrnsql>SELECT * FROM v$nls_parameters;查询结果是:NLS_LANGUAGE=SIMPLIFIED CHINESE;rnNLS_CHARACTERSET=ZHS16GBK;rnrnsql>select nls_charset_name(to_number('0354','xxxx')) from dual;查询结果是:ZHS16GBK;rnrn数据库服务器字符集:sql>SELECT * FROM nls_database_parameters;查询结果是:NLS_LANGUAGE=AMERICAN;NLS_CHARACTERSET=ZHS16GBK;rnrn客户端字符集环境:sql>SELECT * FROM nls_instance_parameters;查询结果是:NLS_LANGUAGE=AMERICAN;NLS_TERRITORY=AMERICA;rnrn会话字符集环境:sql>SELECT * FROM nls_session_parameters;查询结果是:NLS_LANGUAGE=SIMPLIFIED CHINESE;NLS_DATE_LANGUAGE=SIMPLIFIED CHINESE;rnrn目前的情况就是这样的,中文都是??????,请各位大侠指教一下该怎么改?
Qt连接SQLServer的QODBC驱动
解决QSqlDatabase: QODBC driver not loaded QSqlDatabase: available drivers: QSQLITE问题 解压后放到QtSDK\Desktop\Qt\4.7.4\mingw\plugins\sqldrivers 类似的路径下
一个连接oracle 中文乱码的问题
最近写的程序需要操作oracle ,用sqlapi++来连接数据库的,但现在发现,在一台机器上试行的时候用程序插入和读取中文字符 就是乱码,,当然在我的机器上用的时候是显示正确的,rn 在SQL Plus WorkSheet中执行select userenv ('language') from dual ,获得的是 SIMPLIFIED CHINESE_CHINA.ZHS16GBK rnrn然后查看了机器注册表中 HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/NLS_LANG 值为 NULL ,homo0下NLS_LANG为 SIMPLIFIED CHINESE_CHINA.ZHS16GBK rnIDO 下NLS_LANG 也为NULL ,rnrnSQL Plus WorkSheet 中用 Insert 和Select 得到的中文都是显示正常的,但用我的程序 Insert 和Select 的结果就不正常了,程序连接前已将 charsetrn设置为ZHS16GBK ,,不知道怎么弄了。
ODP.NET连接Oracle出现中文乱码?
Oracle服务端非默认的中文字符集,是AMERICAN_AMERICA.WE8ISO8859P1,rn客户端字符集也设为AMERICAN_AMERICA.WE8ISO8859P1,可用ODP.NET连接Oracle出现中文乱码?rn服务端字符集无法改变,ODP.NET可有设置字符集的办法?查了些资料好像说是bug,希望有知道的说下。
Oracle 中文乱码
Oracle 中文乱码
oracle中文乱码
我在DAO里用preparedstatmemt 查询表时,读出来的char类型的中文数据显示???,但是另一张表的char类型的中文数据显示就是正常的,oracle字符集是中文的,用powerbuilder读取的话就是正常的,是怎么一回事啊?
oracle 中文乱码
中文乱码: 需要配置环境变量: 配置环境变量:变量名:NLS_LANG 变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK 系统变量和用户变量里面都要配。单独在数据库配置服务器配不行。应用服务器得配。并且要重启。
oracle 中文乱码
字符集:AL32UTF8 select * from nls_database_parameters where parameter='NLS_CHARACTERSET';  select * from v$nls_parameters; 修改oracle注册表项:NLS_LANG
Hyperion Interactive Report 连接oracle中文乱码
oracle 为9.2 字符集为 us_ascii odbc驱动为 datadirect merant 5.2 平台为redhat linux 9*64 ir 为9.2.1 用数据源连接oracle 时 中文显示为乱码, 那位遇到过这样的问题, 谢谢
有挑战:VB连接oracle,显示中文乱码
异常描述:rnrn 后台Oracle数据库字符集为BIG5,前台为简体中文windows OS,应用程序用VB开发。rn 当Provider=msdaora时中文数据显示正常而当Provider=OraOLEDB.Oracle时中文则显示为乱码。rn PS: PLSQL,SQLPLUS显示都是正常的rnrn代码例子:rn Set objAdoRs = New ADODB.Recordsetrn With objAdoRsrn .CursorLocation = adUseClient2rn .CursorType = adOpenStaticrn .LockType = adLockReadOnlyrn .Open strSql, strConrn Set .ActiveConnection = Nothingrn End WithrnrnstrCon = "Provider=OraOLEDB.Oracle;Data Source=test;User ID=**;Password=**;DistribTX=0;"rnorrnstrCon = "Provider=msdaora; Data Source=test;User ID=**;Password=**;DistribTX=0;"rnrn由于一些原因不能使用msdaora,有没有什么办法可以使简体中文显示正常呢,多谢了~~~
SSH 连接 Oracle 数据库的中文乱码解决方案
http://sandyxl001.blog.163.com/blog/static/166564102012729102013396/   在我的这篇博客中,有两种解决方法,一是使用 nvarchar2 类型来保存中文,二是进行手动转码。最近看到阿里巴巴也使用   了手动进行转码的方法来解决这个问题,使用了代理模式,将 oracle 的驱动包括在类里。   参考:http://ali...
32位连接64位oracle查询数据中文乱码
32位连接64位oracle查询数据中文乱码的解决办法: 新建系统环境变量名称为: NLS_LANG 变量值为: SIMPLIFIED CHINESE_CHINA.ZHS16GBK
C#连接oracle出现中文乱码的问题
亲们~~这个问题困扰半天了!求大神指导。rnrn现在想用C#连接oracle数据库,表中有汉字的字段,还有clob字段rnrn目前使用oledb的connectstring = “Provider = MSDAORA.1;...”不会有乱码,但是他不支持clob字段rn connectstring = “Provider =OleDB.Oracle.1;...”有乱码,死活解决不了。。。rn再用OracleClient连接Oracle时,也是有乱码,无法解决。。。rnrn求大神们指导该怎么办~~
32位PLSQL连接64位oracle中文乱码
右击"我的电脑" – "属性" – "高级" – "环境变量" – "系统环境变量": "新建", 变量名设置为"NLS_LANG", 变量值设置为"SIMPLIFIED CHINESE_CHINA.ZHS16GBK"   参考文献: 1、http://www.5ycode.com/325 2、http://jingyan.baidu.co
weblogic上的jsp连接oracle中文乱码!!!
weblogic数据库连接池连接oracle,读取的数据全是乱码!rn请问高手如何解决!!!
Yii2连接oracle中文乱码解决方法之一
Yii2 中,配置oracle数据库,设置字符类型,必须在DSN中设置,否则无效。
QODBC Driver 5.5.1
编译过程参考:http://blog.csdn.net/xinzhengs/article/details/78638065 资源包含: 1、Visual FoxPro ODBC Driver v6.01.8629.01 2、QODBC Driver v5.5.1
QT QODBC driver 求助!!
QODBC driver not loaded rnrnrn这个为什么不能加载,我想连接access数据库呢rnrn可总是加载不上去。。rnrn怎么解决,网上搜索了很多办法,也没有多少有效的
vc6 连接mysql数据库 中文乱码
我用vc6从数据库中读取中文字段 结果显示问号 中文乱码 我的mysql 字符接都是utf-8 包括client database什么的rn我在程序里messagebox 也是问号rn我知道是字符集的问题rn请问应该怎么改呢 vc6?
asp.net连接oracle数据库中文乱码
本人做一程序,asp.net连接oracle数据库,用的是system.data.oracleclient,为了避免乱码,我将中文全部转换为unicode编码,比如陳開巍就转换为:陳開巍在本机测试没问题,编译好发布到服务器就乱码,看了下区别,本机设置“区域和语言”中的“非unicode程序的语言”设置为“Chinese(RPC)”,而服务器设置为“United States(english)”,但服务器不给更改配置,哪位有什么办法?rn是不是我在“Chinese(RPC)”环境下编译的程序引起的呢?rn
qt 连接SQLite 中文乱码
qt 在调用SQLite数据库时候显示中文时乱码,平台是wince,已经在main函数中做了GB2312转换了
ADO+mySQL 连接,中文乱码
用VC编写ADO连MYSQL,在一台机器上能正常运行,就是中文出现乱码,WHERE子句中出现中文就会提示出错。转至另外一台机器上,该机器上原先用VB设计的程序可以实现中文查询、插入等操作,但用该程序就出错。不知问题出在哪,望高手指教!
jdbc连接oracle数据库中文乱码
我oracle数据库编码是AMERICAN_AMERICA.UTF8,用原生jdbc查询出来中文出现乱码,用pl/sql developer查就不会,数据库编码若为AMERICAN_AMERICA.ZHS16GBK也不会乱码,但现在不能更改数据库编码,请问还有其他什么解决办法呢?
mysql 连接php中文乱码
php mysql 中文乱码
R连接postgresql中文乱码
连接postgresql library('RPostgreSQL') pgdriver <- dbDriver("PostgreSQL") key <- dbConnect( pgdriver,host = "192.168.1.121", port = "5432", dbname = "test_project", user = "postgres", pas
asp.net连接MYSQL数据库中文乱码
问一个问题,你们用没有asp。net读取MYSQL数据库,汉字乱码谁有解决方案?rn数据库的字段编码为utf-8,放到asp.net就显示为乱码rn数据是从c#后台读出来然后显示到页面上,如何解决啊!rn急。。。急。。。急。。。
excel连接mssql2012中文乱码
用Excel连接MSSQL2012,出来的中文是乱码,直接在数据库中预览该表,则中文能正常显示,excel 是2010的,不知道如何解决。
putty连接Linux中文乱码
选择Windows下的Translation,然后右边的编码改为UTF-8即可。
java连接access中文乱码
Properties pro = new Properties();        pro.setProperty("charSet","GB2312"); conn = DriverManager.getConncetion(url,pro);
Django 连接mysql数据库中文乱码
版本:CentOS6.8 python3.6.4 django1.8.2 数据库pymysql 我使用的终端是CentOS终端,CentOS桌面版安装的pycham,windows使用Navicat连接mysql数据库。 我遇到的情况大致这样,在CentOS终端进入mysql,然后查询表,中文显示没问题,在Navicat设置了utf-8,中文显示也没问题,但是当我在虚拟环境执行p...
Qt QODBC数据库不能打开
前提:rnwin xp环境; Qt SDK版本v1.1.3; 库文件版本4.7.4;rnQODBC驱动已装,运行以下代码能够查看支持的驱动:rnqDebug() << "Available drivers:";rnQStringList drivers = QSqlDatabase::drivers();rn foreach(QString driver, drivers)rn qDebug() << driver << "\t";rn运行结果为:rnAvailable drivers: rn"QSQLITE" rn"QODBC3" rn"QODBC"rnrn问题如下:rn现在我添加一个QODBC的数据库(就用Qt帮助里面的示例程序):rndb = QSqlDatabase::addDatabase("QODBC");rndb.setDatabaseName("DRIVER=Microsoft Access Driver (*.mdb);FIL=MS Access;DBQ=myaccessfile.mdb");rnif (!db.open()) rn qDebug() << "db open failed!";rnrnrn运行结果为:rndb open failed!rnrn我尝试了网上的各种添加QODBC的方法,结果都打不开.这是为神马呢?
linux qt QODBC连接sql server 驱动 问题 ,实在是没辙了
程序在linux下,现在需要连接windows的sqlserver .rn[code=c] db = QSqlDatabase::database(SqlExpressway);rn if ( db.isValid() == false )rn rn db = QSqlDatabase::addDatabase("QODBC", SqlExpressway);rnrn QString dsn = QString("DRIVER=SQL SERVER;SERVER=%1;port=%2;DATABASE=%3;uid=%4;pwd=%5;")rn .arg("192.168.1.214")rn .arg(1344)rn .arg("expressway")rn .arg("sa")rn .arg("");rnrn db.setDatabaseName(dsn);rn db.setHostName("192.168.1.214");rn db.setPort(1344);rn db.setUserName("sa");rn db.setPassword("");rn if ( db.open() == false )rn rn db.removeDatabase(SqlExpressway);rn qDebug()<<"error:"<
PHP*Oracle*SQL*中文乱码
在PHP中,用Sql语句 插入一条记录如rnInsert into Table1(T1) values ('上') ;rn在数据库里保存的是 "IO" rn然后 rn "select count(*) from Table1 where T1 ='上'" rn与 "select count(*) form Table1 where T1='IO' 是一样的 rn显示结果都是一条。rn怎样才能让数据库里保存的是"上",而不是"IO" 呢? rnrn
oracle客户端中文乱码解决方案
第一步:登陆后查询,具体语句:SELECT * FROM v$nls_parameters 第二步:查看NLS_CHARACTERSET字符集编码 ,例:NLS_CHARACTERSET=US7ASCII 第三步:添加系统环境变量(变量值根据第二步查询值添加), 变量名:NLS_LANG,变量值:AMERICAN_AMERICA.US7ASCII 第四步:重启plsql
delphi调用oracle中文乱码
我看了一下我的注册表,ORA8客户端的nls_lang的值是SIMPLIFIED CHINESE_CHINA.ZHS16GBK,ora7客户端的直接是NA。rn我用select * from V$nls_parameters;看到服务器上的是SIMPLIFIED CHINESE。rnrnPB6.5用的是ora7客户端,中文显示一点问题没有。我用delphi7调ora8的客户端(oracle for oledb那种),用adoquery,dbgrideh(dbgrid也是乱码)显示,结果就是乱码。rnrnPA 109 I3R;rn6~?srnB,;]6+rnrn全是如上那样的乱码,还不全是“?”。我试着改注册表的nls_lang值,试过多种组合,都不行。不是字符集的问题吧?rn感觉好像delphi把中文当成了两个字符。咋整??rn
oracle 中文乱码 和 sqlplus 格式输出
oracle 中文乱码 和 sqlplus 格式输出中文乱码 在插入中文数据之前必须要做。 - sudo gedit /home/oracle/.bash_profile export LANG=zh_CN.UTF-8 export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8" - source /home/ora
oracle字符集修改 中文乱码
sqlplus / as sysdba;//操作系统用户认证模式 sqlplus sys/admin as sysdba;//非操作系统用户认证模式 1、查询oracle服务端字符集 select t.PARAMETER ,t.VALUE from nls_database_parameters t where t.PARAMETER in ('NLS_LA...
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview