Qt SQL Server 和变音符号

3
  • 操作系统:Windows 8.1
  • 数据库:MS SQL Server 2008 R2
  • Qt 版本:5.2
  • 数据库驱动程序:"QODBC"

我遇到了一个小问题,涉及到umlaut。

我用NVARCHAR(35)创建了一张表,并将其填充为N’1ö2’。当我在SQL Management Studio中选择某些内容时,我可以看到umlaut ö。

但是,在Qt中,我使用如下代码:qDebug() << “name“ << aQuery->value(„name“).toString();,但我得到的结果是name "1?2"

即使我循环遍历可用编解码器(QTextCodec::availableCodecs();),我也无法得到一个有效的1ö2字符串。

QByteArray ba = aQuery->value(„name").toByteArray();
qDebug() << "hex" << ba.toHex() << "str" << QString(ba) << "count" << ba.count();

输出:

hex "31efbfbd32" str "1?2" count 5

31是1
32是2
efbfbd是Unicode码代表的是?(替换字符)

所以我的问题非常简单——我做错了什么?;-)

谢谢,马蒂亚斯


一个类似的帖子:https://dev59.com/C2HVa4cB1Zd3GeqPn5Db - Jens Mühlenhoff
你是在使用MDAC ODBC驱动程序(SQLSRV32.dll)还是本地客户端(SQLNCLI11.dll)ODBC驱动程序? - Jens Mühlenhoff
据我所知,MS SQL默认使用UTF8(或更好的UCS-2),我已经尝试更改ConnectionOptions(链接)但没有成功。我尝试了SQL Server(SQLSRV32.dll)、SQL Server Native Client 10.0(SQLNCLI10.dll)以及ODBC Driver 11 for SQL Server(MSODBCSQL11.dll)- 行为相同。我尝试更改连接字符串(添加“AutoTranslate=No;Regional=No”)并在ODBC管理器中创建了一个系统DSN(关闭转换复选框)- 行为相同。 - Matthias
好的,现在它可以工作了。在请求之前加上一个单独的aQuery.clear;就可以了。;-) - Matthias
好消息,你应该将其写成答案并接受该答案,这样未来的访问者就更容易找到它。 - Jens Mühlenhoff
1个回答

2

好的,现在它可以正常工作了。在我发送请求之前加上一个 aQuery.clear; 解决了这个问题。 ;-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接