将 MariaDB 升级到版本 10.11.5 后,我的连接代码无法正常工作。
我使用
MySql.Data.MySqlClient
,但每次我收到错误:
System.InvalidCastException: Object cannot be cast from DBNull to other types.
我的代码在 C# 控制台应用程序上非常简单,仅用于测试。
using MySql.Data.MySqlClient;
string cs = @"server=192.168.0.1;userid=uName;password=passwd;database=dbName";
using var con = new MySqlConnection(cs);
try
{
con.Open();
Console.WriteLine($"MySQL version : {con.ServerVersion}");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
数据库连接替代方案是什么?
MySql.Data 版本:8.1.0
我的所有 API 应用程序都停止工作了;(
最新版本的 MySql.Data 与最新版本的 MariaDB 不兼容。根据 MySQL bug #109331,Oracle 开发团队不支持 MariaDB,并且这种不兼容性不会得到修复。
MariaDB 建议使用MySqlConnector(免责声明:主要作者)。通常它是 MySql.Data 的直接替代品,但请参阅文档以获取有关可能需要处理的一些边缘情况的信息。
pre-alpha 版本的软件包试图解决这个问题。您可以尝试一下,如果有帮助请告诉我。
NuGet:https://www.nuget.org/packages/Jf.MySql.Data.Collations/
来源:https://github.com/jeffraska/Jf.MySql.Data.Collations/
该软件包处于“可在我的计算机上运行”状态。这意味着 .NET Framework 4.5、非常旧的 MySql.Data 6.9.7 库和当前在 Debian 存储库中可用的最新 MariaDB 10.11.4。所以不要指望奇迹。
它使用 MySql.Data 库的标准命令拦截器功能(https://dev.mysql.com/doc/connector-net/en/connector-net-interceptors.html)来更改所有
SHOW COLLATION
查询并替换与 SHOW COLLATION WHERE id IS NOT NULL
。
该包还具有更改 MySql.Data 的内部字符集映射的功能,以允许读取 8.0.28 之前版本的 MySql.Data 中的 utf8mb3 字段。
MariaDB 最近在 10.11.7 中修复了该问题 https://jira.mariadb.org/browse/MDEV-31608。因此,如果您无法使用推荐的 MySqlConnector 连接器,则需要升级服务器。