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/

相关推荐
7***99871 小时前
GaussDB数据库中SQL诊断解析之配置SQL限流
数据库·sql·gaussdb
Wang's Blog2 小时前
MongoDB小课堂: 文档操作核心技术指南:主键机制、CRUD操作与最佳实践
数据库·mongodb
i***t9192 小时前
Linux下MySQL的简单使用
linux·mysql·adb
g***26793 小时前
最新SQL Server 2022保姆级安装教程【附安装包】
数据库·性能优化
风123456789~4 小时前
【OceanBase专栏】OB背景知识
数据库·笔记·oceanbase
4***72134 小时前
【玩转全栈】----Django模板语法、请求与响应
数据库·python·django
c***42104 小时前
Django视图与URLs路由详解
数据库·django·sqlite
数据库学啊4 小时前
团队小希望运维简单,时序数据库选型有什么推荐?
运维·数据库·时序数据库
2***65635 小时前
数据库操作与数据管理——Rust 与 SQLite 的集成
数据库·rust·sqlite