You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySqlDataReader无法读取含自定义函数的MySQL视图的information_schema元数据

问题根因

  1. MySql.Data 8.0.27存在已知的元数据解析bug:当视图包含返回TEXT类型的自定义函数字段时,驱动读取information_schema.columns的结果时会出现内部静默异常,导致ExecuteReader返回的结果集为空,所以reader.Read()直接返回false,循环不会执行。你手动执行SQL能拿到结果,是因为原生MySQL客户端没有该解析缺陷。
  2. 字符集匹配问题:你的自定义函数声明返回utf8编码的TEXT类型,若连接字符串未显式指定字符集,驱动在预解析字段元数据时会因编码不兼容跳过结果集。
  3. NULL值处理缺陷:当JSON_ARRAYAGG无匹配数据时会返回NULL,该版本驱动对视图中函数返回的NULL TEXT类型处理逻辑有问题,会直接终止结果集枚举。

解决方案

  • 优先将MySql.Data包升级到8.0.33及以上版本,该bug已被官方修复。如果受项目依赖限制无法升级,可以替换为MySqlConnector驱动,对这类元数据解析场景的兼容性更好。
  • 在数据库连接字符串中显式添加CharSet=utf8mb4;参数,强制驱动使用统一编码解析所有文本类型字段,避免编码解析异常。
  • 调整自定义函数逻辑,添加NULL值兜底:在RETURN语句前增加IF result IS NULL THEN SET result = '[]'; END IF;,保证函数永远返回非空的TEXT内容,规避驱动的NULL值处理缺陷。
  • 临时适配方案:将查询元数据的SQL替换为DESCRIBE {0},该语句返回的字段元数据结构更简单,旧版本驱动解析不会出现异常。
  • 补充异常捕获逻辑:检查你的代码外层try-catch是否吞掉了MySqlException,确认是否有隐藏的报错导致执行流程直接跳过了Read循环。

内容的提问来源于stack exchange,提问作者Matt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:36:04