C#-Dapper查询mysql数据库可空的tinyint(1)报错:Error parsing column 11 (IsConvent=1 - SByte)指定类型转换无效

错误信息

Error parsing column 11 (IsConvent=1 - SByte)
“指定类型转换无效”

数据库:MySQL
ORM:Dapper
框架: .NET

外在显示:

在这里插入图片描述

排查及验证结果

MySQL:
数据类型为tinyint(1)
且 数据中有null、和正常值
C#:
且 定义为bool、int、byte等值类型或可为空的值类型去接收

时使用dapper就会出现这种错误。

解决方案:

  1. 类型不变,修改长度大于1,如tinyint(2)等 --已验证修改为2可用
  2. 长度不变,修改字段类型为 samllint 或 bit等 --已验证修改为samllint(1)可用
  3. 修改视图,将该列cast转换null值 --已验证将null转换为实际值可用
  4. C#中修改接收类型为引用类型,object、string类型等,但是null、0、1需要程序内或交给前端自己去转换 --已验证object、string正常接收

猜测原因:
dapper以SByte类型去识别接收导致转换异常。可能是dapper本身的一个坑。

SByte类型和Byte类型的差别只是有无正负值的区别。与sql中tinyint类型也很像,都是-128~127。