• 3829阅读
  • 5回复

[提问]求助,qt5.5在ubuntu连接sqlserver中文问题 [复制链接]

上一主题 下一主题
离线wfwjp
 

只看楼主 倒序阅读 楼主  发表于: 2015-11-18
最近学习ubuntu,qt5.5。需要连接服务器上的sqlserver2008数据库,就根据网上的步骤(http://blog.csdn.net/w_ww_w/article/details/18075957)安装unixodbc和freetds。配置odbc后,发现能连上数据,varchar类型列的汉字能读取,但是类型为char的列的汉字读取不到,这是为什么?请求解救。

1、在/usr/local/etc下freetds.conf配置 client charset =UTF-8
2、连接数据库
QSqlDatabase netdb=QSqlDatabase::addDatabase('QODBC');
netdb.setDatabaseName(test");
netdb.setUserName("sa");
netdb.setPassword("lscslscs");

3、读取
netquery.prepare("select bh,mc,qc from ttzd");
netquery.exec();
netquery.next();
QString ls_str1=netquery.value(0).toString();
QString ls_str2=netquery.value(1).toString();
QString ls_str3=netquery.value(2).toString();
ttzd中mc是char(10),qc是varchar(10)
ls_str3是汉字,但是ls_str2="",这是怎么回事?如何配置,怎么解决?求助各位

离线stlcours

只看该作者 1楼 发表于: 2015-11-20
我记得SQL Server有的字段类型不能存储中文,好像就是指char
离线wfwjp

只看该作者 2楼 发表于: 2015-11-20
回 stlcours 的帖子
stlcours:我记得SQL Server有的字段类型不能存储中文,好像就是指char (2015-11-20 06:58) 

我们现在的sqlserver数据库大部分是char(10)这种类型啊,可以存储汉字。我觉的是配置方面的问题,我以前没有用过ubuntu。在tsql -S -U -P -D测试能显示汉字。
离线stlcours

只看该作者 3楼 发表于: 2015-11-21
今天回家路上还帮你想这个问题。其实很简单,两个字段可以用不同编码来存储中文,但是传出去数据的时候,只有一种方式,因此必须要对其中一个字段做特殊的处理,才能正确显示,非此即彼。
离线wfwjp

只看该作者 4楼 发表于: 2015-11-22
回 stlcours 的帖子
stlcours:今天回家路上还帮你想这个问题。其实很简单,两个字段可以用不同编码来存储中文,但是传出去数据的时候,只有一种方式,因此必须要对其中一个字段做特殊的处理,才能正确显示,非此即彼。 (2015-11-21 09:29) 

非常感谢您的帮助,我是新手,不是很了解编码,您觉的怎么处理或者修改下配置?
我把char(10)字段select的时候改成convert(nvarchar(30),mc)就能显示汉字了。但是这样改就和windows版本不一致了。还有没有更好的方法?还没有试验下insert怎么样。
离线stlcours

只看该作者 5楼 发表于: 2015-11-23
你现在的方法是在SQL端坐转换,其实也可在QT软件端做转换,你可以试试
QString ls_str2=QString::fromLocal8Bit(netquery.value(1));
快速回复
限100 字节
 
上一个 下一个