您的位置:首页 > 数据库 > MySQL

MySQL ODBC 3.51 Driver的一个bug

2011-07-18 22:41 295 查看
1.环境
.MySQL 5.1
.MySQL ODBC 3.51 Driver
.ADO 2.8

2.现象
示例代码
GETDBC(pdbor,this->local_dbc_.c_str()); string sql = "select '已查看' from dual"; AUTO_QUERY_RECORDSET(CRecordset,prs,pdbor); prs = pdbor->Query(sql.c_str()); _variant_t v; prs->GetFieldValue(0,v); FieldInfo fi; prs->GetFieldInfo(0,&fi); ///DefinedSize,ActualSize 都等于3 string sval = ExVariantToString(v); ///< sval="已"
预期的的字段值为"已查看",而得到的实际是"已".

针对此问题做了若干尝试
.不论"已查看"替换成什么内容,只要包含中文则结果总是不对(一度把分析方向引向字符集问题.注意:内容不是乱码,而是不确定地截断了)
.用SQLyog工具执行没有此问题
.cast('已查看' as char(10))的结果正确(convert等效)
.MySQL ODBC选项:
Return Table Names for SQLDescribeCol
Don't Optimized Column Width(也正是此引向了得到合理解释的页面)

3.解释
http://bugs.mysql.com/bug.php?id=35044

3.51.18 (6-Aug-2007)
*Lengths returned by SQLColumns(), SQLDescribeCol(), and SQLColAttribute()
were often incorrect. These lengths should now conform to the ODBC
specification. FLAG_FIELD_LENGTH no longer has any effect. The default
behavior was incorrect. (Bug #27862)

4.解决
驱动升级到MySQLODBC 5.1 Driver.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: