MySQL ODBC 5.1 驱动程序 returns ADODB 的数据类型错误
MySQL ODBC 5.1 driver returns wrong datatype to ADODB
情况:使用遗留经典 ASP 代码,试图将代码库从旧服务器移动到新服务器。
该代码尝试使用 MySQL ODBC 5.1 驱动程序和 ADODB.Connection 对象连接到 Windows 服务器上的 MySQL 数据库。
Connection String = "Driver={MySQL ODBC 5.1 Driver};Server=dbserver;Database=dbname;Uid=username;Password=password;Option=3"
查询结果在 ADODB.RecordSet 个对象中 return。
当我尝试访问包含标准 MySQL 整数的字段时,出现此错误:
Microsoft VBScript runtime error '800a01ca'
Variable uses an Automation type not supported in VBScript
如果我使用 cLng() 手动转换字段,则会消除错误并得到正确的值 returned。但是,代码太多,需要手动查找每个对整数的引用并手动转换它。
VarType() returns 19 对于这些值,这似乎是 VB 无法理解的某种 Long 数据类型。 (See here)
对于长整数,ODBC 驱动程序不应该 return VarType 3 吗? (see here)
我尝试在连接字符串的 "option=" 参数中传递选项 16384 (NO_BIGINT),但没有任何区别。
知道如何纠正这个问题吗?似乎应该有一个选项可以将 MySQL ODBC 驱动程序传递给 return longs as Long Integer 数据类型,但我找不到它。
在任何人提及之前:是的,我们知道经典 ASP 不好。不,我们现在没有资源将此代码移植到其他地方。我们只需要它在当前时间继续处理经典 ASP。
OK 排除过程终于发现问题了。不确定为什么会发生这种情况,但这一定是 MySQL ODBC 驱动程序中的错误。
具有 UNSIGNED 属性的整数字段导致错误。删除此属性会导致字段值作为标准整数类型返回。显然,ODBC 驱动程序没有正确处理从 unsigned int 到 vbscript Integer 类型的转换,而是返回一个指向 Long 的指针。
我在用作布尔值的 tinyint(1) 字段上也注意到了这个问题。将数据类型从 tinyint(1) 更改为 int(11) [默认值] 也消除了此错误。
希望这会对其他人有所帮助。仅供参考,我还在 MySQL ODBC 驱动程序论坛中发布了这个问题,但没有人愿意回应。
情况:使用遗留经典 ASP 代码,试图将代码库从旧服务器移动到新服务器。
该代码尝试使用 MySQL ODBC 5.1 驱动程序和 ADODB.Connection 对象连接到 Windows 服务器上的 MySQL 数据库。
Connection String = "Driver={MySQL ODBC 5.1 Driver};Server=dbserver;Database=dbname;Uid=username;Password=password;Option=3"
查询结果在 ADODB.RecordSet 个对象中 return。 当我尝试访问包含标准 MySQL 整数的字段时,出现此错误:
Microsoft VBScript runtime error '800a01ca'
Variable uses an Automation type not supported in VBScript
如果我使用 cLng() 手动转换字段,则会消除错误并得到正确的值 returned。但是,代码太多,需要手动查找每个对整数的引用并手动转换它。
VarType() returns 19 对于这些值,这似乎是 VB 无法理解的某种 Long 数据类型。 (See here) 对于长整数,ODBC 驱动程序不应该 return VarType 3 吗? (see here)
我尝试在连接字符串的 "option=" 参数中传递选项 16384 (NO_BIGINT),但没有任何区别。
知道如何纠正这个问题吗?似乎应该有一个选项可以将 MySQL ODBC 驱动程序传递给 return longs as Long Integer 数据类型,但我找不到它。
在任何人提及之前:是的,我们知道经典 ASP 不好。不,我们现在没有资源将此代码移植到其他地方。我们只需要它在当前时间继续处理经典 ASP。
OK 排除过程终于发现问题了。不确定为什么会发生这种情况,但这一定是 MySQL ODBC 驱动程序中的错误。
具有 UNSIGNED 属性的整数字段导致错误。删除此属性会导致字段值作为标准整数类型返回。显然,ODBC 驱动程序没有正确处理从 unsigned int 到 vbscript Integer 类型的转换,而是返回一个指向 Long 的指针。
我在用作布尔值的 tinyint(1) 字段上也注意到了这个问题。将数据类型从 tinyint(1) 更改为 int(11) [默认值] 也消除了此错误。
希望这会对其他人有所帮助。仅供参考,我还在 MySQL ODBC 驱动程序论坛中发布了这个问题,但没有人愿意回应。