我用tsql能连上,也能取回并正确显示字段,但用isql和DataManager(II)都不行。所以就看了下tsql的源码,相关的部分在这里:
static void populate_login(TDSLOGIN * login, int argc, char **argv)
它先取本机locole对应的字符集(我的机器上是en_US.UTF-8),然后再调用tds_set_client_charset(login, charset);
所以它能够连得上。
那么这是不是QODBCDriver和一个bug?因为我用UTF-8设置了setCodecForTr( )、setCodecForLocale( )、setCodecForCString( )都不行。sql.log里面还是显示:UNICODE Using encoding ASCII 'ISO8859-1' and UNICODE 'UCS-2LE'
所以我就想QODBCDriver的ctor有两个函数,sql环境和sql连接的句柄。我想通过odbc api从这两个参数入手,把字符集设定好再传给它。可是MSDN里的SQLSetConnectAttr( )和SQLSetConnectAttr( )函数里面都没找到相关的项。
或者再从freetds api入手?正在试……