ASP.NET Core Web API查询MySQL BLOB字段PSIMAGE返回null怎么解决
解答
核心原因
你对「无模型映射就没有类型转换」的理解存在误区:ExecuteQuery方法内部依然会把数据库返回的结果集映射为动态对象或字典结构,这一步必然涉及数据类型转换,而绝大多数MySQL数据访问类库(Dapper、MySqlConnector、OrmLite等)出于性能考虑,默认会限制BLOB类大字段的自动读取,要么只读取小于阈值的BLOB内容,要么直接返回null。
另外可以先排查小概率问题:检查数据库字段名是否和返回的PSIMAGE完全一致,是否有大小写拼写错误(仅Linux下大小写敏感的MySQL实例会触发)。
解决方法
方法1:开启BLOB字段读取配置
如果使用MySqlConnector,在数据库连接字符串中添加AllowLoadLocalInfile=true,执行查询时显式传入CommandBehavior.SequentialAccess参数,强制读取大字段内容。
方法2:强类型映射查询
不要直接返回动态查询结果,显式映射到你已定义的PSSEGMENTPICTURE模型,ORM会识别到byte[]类型属性,主动读取BLOB字段内容:
public JsonResult GetSegmentPictures() { var res = _sql.Query<PSSEGMENTPICTURE>("SELECT PSID,PSEDISEGMENTID,PSIMAGE FROM PSSEGMENTPICTURES"); return Json(res); }
方法3:SQL层面转Base64
直接在SQL中把BLOB字段转为Base64字符串,完全规避C#侧的类型转换问题:
SELECT PSID,PSEDISEGMENTID,TO_BASE64(PSIMAGE) AS PSIMAGE,created_at FROM PSSEGMENTPICTURES
内容的提问来源于stack exchange,提问作者SecurityObscurity
相关产品推荐
相关产品推荐

