首批通过分布式安全可靠测评,为关键业务系统打造
.net 驱动连接报错
更新时间:2026-06-03 03:01
问题现象
使用 .net MySQL 0.56.0 驱动连接 OceanBaes 数据库,执行存储过程相关语句,驱动报如下错误:
Unable to cast object of type system.strings to system.Byte
关键诊断信息
触发条件
| param_list | varchar(1048576)
| returns | varchar(1048576)
OceanBase 的上述两列类型是 varchar,业务使用了原先的 .net.mysql 驱动,驱动端执行存储过程相关语句。
事前巡检
查看当前租户的 mysql.proc 定义:
desc mysql.proc;
| param_list | varchar(1048576) |
| returns | varchar(1048576) |
OceanBase 的上述两列类型是 varchar,如果业务使用了原生的 .net mysql 驱动,驱动端在执行存储过程相关语句时可能报错。
事后诊断
.net mysql 0.56.0 驱动报错 Unable to cast object of type system.strings to system.Byte 且执行的报错语句为 select param_list, returns from mysql.proc。
问题原因
MySQL 5.7 上 mysql.proc 表的相关列与 OceanBase 的实现不同。
MySQL V5.7 版本上列类型如下:
| param_list | blob
| returns | longblob
OceanBase 数据库上 mysql.proc 虚表相关列类型如下:
| param_list | varchar(1048576)
| returns | varchar(1048576)
在 .net mysql 驱动实现上获取上述两列结果时与期待的 blob 不符,导致报错。
问题的风险及影响
使用 .net MySQL 0.56.0 驱动连接 OceanBase 数据库时,无法执行包含存储过程的相关语句。
影响租户
影响 OceanBase 数据库中的 MySQL 租户,对于 SYS 租户和 Oracle 租户无影响。
影响版本
OceanBase 数据库 V2.2.77 GA(oceanbase-2.2.77-20210508211731)及之后版本、V3.1.2 GA(oceanbase-3.1.2-20210618150922)及之后版本、V3.2.3 GA(oceanbase-3.2.3.0-20220418212020)及之后版本、V3.2.4 GA(oceanbase-3.2.4.0-100000072022102819)及之后版本、V4.1.0 GA(oceanbase-4.1.0.0-100001122023040322)及之后版本。
解决方法及规避方式
原生 MySQL V8.0 版本上将
mysql.proc表去掉了,对应的 .net MySQL 驱动将不会访问mysql.proc表,因此您可以通过升级驱动的方式规避该问题,内部验证可行的驱动版本是 8.0.33。用户可以在业务侧去掉包含存储过程的相关调用。
升级到问题已修复版本,目前已修复的版本包含 OceanBase 数据库 V3.2.4 BP7(oceanbase-3.2.4.7-107000012023113010)、V4.1.0 BP4(oceanbase-4.1.0.2-104000032023092119)。