C#使用mysql-connector-net驱动连接mariadb报错

给树莓派用最新的官方OS重刷了一下,并且用apt install mariadb-server装上"mysql"作为我的测试服务器。然后神奇的事情发生了,之前用得好好的程序突然就报错了,经过排查,发现在连接数据库的Open阶段就报错了。写了个最单纯的Console,只是定义了连接字符串,然后Open,也不做catch处理复现了一下,详细错误是:

哦豁,难道mysql给.net的驱动有问题了?我用的是官网下载的mysql-connector-net-8.1.0-noinstall,4.6.2和4.8同样问题。同样的程序,连接到别的数据库还是正常的,估计就是新的mariadb不被支持了。

网上找了一圈,发现确实可能就是这个原因。因为mariadb虽然脱胎于mysql,但终将渐行渐远,官方mysql驱动只会保证支持自己的mysql。

根据论坛里某位网友的提示,直接在控制台登录进能连和不能连的数据库后,用show collation看到了区别:果然新装的mariadb上有一堆null,程序可正常运行的就没有。猜测驱动一旦连接上数据库后会获取这些信息,如果对空值未作处理的话就报错了。

解决办法倒也简单粗暴,放弃mysql官方驱动,改用MySqlConnector。NuGet Gallery | MySqlConnector 2.2.7

我的程序比较老,当时用的framework做框架,所以切到当前工程下打开包管理器控制台,输入 NuGet\Install-Package MySqlConnector -Version 2.2.7安装。

代码修改也很简单,把之前的using MySql.Data.MySqlClient 直接替换成using MySqlConnector,其余部分几乎可以零修改。

参考资料:
MySQL Bugs: #109331: MySQL Connector fails to connect to MariaDB 10.10.2

https://mysqlconnector.net/overview/installing/

相关推荐
yong99902 小时前
C# 实时查看硬件使用率(CPU 内存 硬盘 网络)
开发语言·网络·c#
oradh2 小时前
Oracle数据库中的Java概述
java·数据库·oracle·sql基础·oracle数据库java概述
2301_795099742 小时前
如何优化SQL中大批量数据的物理删除_分批次与间隔控制
jvm·数据库·python
2301_812539672 小时前
CSS如何引入CSS形状生成器_通过自定义属性实现图形化样式
jvm·数据库·python
maxmaxma3 小时前
Claude Code集成DeepSeek-V4-pro全栈开发 - MCP 连接数据库
数据库·ai
lb29173 小时前
navicat连接Oracle报错了:“身份证明检索失败”
数据库·oracle·连接oracle数据库报错
xfhuangfu3 小时前
Oracle 12.2 ORA-600 数据库发生重启案例
数据库·oracle
m0_609160493 小时前
Golang怎么实现数据库连接重试_Golang如何在启动时重试连接直到数据库就绪【技巧】
jvm·数据库·python
罗超驿3 小时前
8.数据库约束学习笔记:从非空、默认、唯一与主键约束到主键自增
数据库·mysql
zxrhhm4 小时前
PostgreSQL 大规模随机数据生成完整指南
大数据·数据库·postgresql