.NET 6(VB.NET)中MySqlDataAdapter连MySQL报Windows-1252编码错误
报错根因
.NET 6 属于跨平台的 .NET Core 生态线,和 .NET Framework 不同,默认不会内置 Windows-1252 等非通用代码页的编码实现。你当前使用的 Oracle 官方 MySql.Data 驱动在未显式指定连接字符集时,会默认尝试加载 Windows-1252 编码建立连接,找不到对应编码实现就会抛出该错误,和你是否手动配置过编码参数无关。
解决方法
你可以任选以下一种方案修复:
方案1:显式指定连接字符集(推荐,无额外依赖)
- 将项目引用的
MySql.DataNuGet 包升级到最新稳定版本 - 在数据库连接字符串中显式添加
CharSet=utf8mb4参数,修改后的连接字符串示例:"server=MyServerAddress;uid=MyUser;pwd=MyPW;database=MyInitialCatalog;CharSet=utf8mb4"
显式指定字符集后,驱动会直接使用指定的UTF8编码建立连接,不会再尝试加载Windows-1252编码,从根源规避报错。
utf8mb4是MySQL支持完整Unicode字符集(含emoji、生僻字符)的标准配置,为当前生产环境首选。如果你的数据库实际使用gbk、latin1等其他编码存储数据,将CharSet参数替换为对应编码名称即可,避免出现乱码。- 将项目引用的
方案2:注册缺失的编码提供程序(适用于无法升级驱动、不能修改连接字符串的场景)
- 给项目安装NuGet包
System.Text.Encoding.CodePages,该包包含了.NET 6 环境缺失的所有Windows平台代码页编码实现 - 在应用程序启动的最开头(控制台程序写在
Main方法第一行、WinForm程序写在Application.Run之前、Web程序写在启动配置最前端)执行编码注册代码,VB.NET实现如下:Imports System.Text ' 启动阶段执行 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance)
注册完成后,.NET 6 即可正常识别Windows-1252编码,数据库连接可以正常打开。
- 给项目安装NuGet包
验证提示:修改完成后可以先运行你写的单独测试MySqlConnection.Open的代码验证,确认无报错后再运行原有数据填充逻辑即可。
内容的提问来源于stack exchange,提问作者user17611369
相关产品推荐
相关产品推荐

