前天早上刚到公司,就有反馈说某线上项目异常,用自己的账号访问现象可以复现,查了日志,发现了这条异常日志:

System.NotSupportedException: Character set 'utf8mb3' is not supported by .Net Framework.

这条日志是从当天早上6点半之后开始出现的,而这个项目上线后基本没有改过,寻问了下数据库那边,数据库和表都没有改过,而且使用的是 utf8mb4 编码。找到报异常的那个SQL语句,里面用到了两个内置函数SQL_CALC_FOUND_ROWSFOUND_ROWS,把这两个函数去掉就恢复正常,问题初步锁定在这两个函数上。
虽然说找到了问题所在点,但是解决这个问题的方向错了,我把精力花费在了查找这两个函数的其他用法及平替的方法上,费了很长时间也没有找到如何设置character,在SQL连接字符串中设置了数据库编码也毫无作用,也没有找到既能平替又不报这异常的方法来。
分析了下原因要么是程序的运行环境变了,要么是数据库环境变了,最后灵光乍现,既然环境更新了,那把引用的包更新下会不会解决呢?把nuget中的MySql.Data包从8.0.26更新到8.0.29,完美解决。
最后与运维那边确认了下,早晨的时候数据库确实更新过。
后记:第二天另外一个连MySQL数据库的项目也出现这个异常,更新MySql.Data后解决。这两个项目一个是.Net5,另一个是.Net4.6.2

简单记录,备忘。也希望能给大家带来帮助,少走弯路。

Last modification:May 9, 2022
如果觉得我的文章对你有用,请随意赞赏