MySQL ODBC 3.51 Driver的一个bug

 

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.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值