炫意html5
最早CSS3和HTML5移动技术网站之一

QT插入数据库中文异常

环境:
linux
QT5
unixODBC
freeTDS
SQL Server 2008

1、QSqlQuery直接执行sql没问题
如:QString sql = “insert into t (is,name) values(1,’中文’)”;
可以正常插入id和name

2、使用bindValue
query.prepare(“insert into t (is,name) values(?,?)”;
query.bindValue(0,1);
query.bindValue(0,”中文”);
id可以插入,name为空(name如果不是中文可以正常插入)
(相同的代码在windows环境可以正常插入中文)
【希望解决该问题】

3、如果连接的不是sql server而是sqlite,情况2的代码可以正常插入。

分析:
情况1说明unixODBC和freeTDS是没问题的,可以插入中文。
情况3说明qt的编码是没问题的。

困扰我2天了,求大神指教!

回答

感谢大家的回复!
已经找到解决办法了,问题出在了QT的ODBC驱动上。
需要手动修改QT源码的odbc目录下的qsql_odbc.cpp文件。
将unicode修改为true。
(其实现在看到源码也挺迷惑的,qt默认在Unicode=false的情况下,处理QString是用的str.toUtf8(),但是这种方式反而不能正确写入中文)

炫意HTML5 » QT插入数据库中文异常

Java基础教程Android基础教程