MariaDB从utf8mb3转为utf8mb4后PowerShell连接报错问题咨询
你遇到的报错并非PowerShell本身的配置问题,核心是两个遗漏场景导致驱动识别到utf8mb3字符集:
- 仅修改了表和列的字符集,未修改数据库级别的默认字符集,连接时.NET驱动会优先读取库的默认字符集
- MariaDB 10.6版本中
utf8默认是utf8mb3的别名,旧版MySQL驱动对该别名适配存在缺陷,会直接识别为不支持的utf8mb3
解决步骤
- 第一步:修改目标数据库的默认字符集与排序规则,执行如下SQL:
ALTER DATABASE pcinventory CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
- 第二步:全量校验库内所有表、列的字符集,避免遗漏未修改的对象:
- 检查是否存在字符集非utf8mb4的表:
SELECT TABLE_NAME, TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'pcinventory' AND TABLE_COLLATION NOT LIKE 'utf8mb4%';- 检查是否存在字符集非utf8mb4的列:
对查询返回的表和列,按你已掌握的ALTER TABLE语句完成字符集修改即可。SELECT TABLE_NAME, COLUMN_NAME, COLLATION_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'pcinventory' AND COLLATION_NAME NOT LIKE 'utf8mb4%'; - 第三步:在PowerShell连接命令中强制指定连接字符集,修改你的连接语句,添加
-CharSet utf8mb4参数:
Connect-MySqlServer -server "127.0.0.1" -Database "pcinventory" -CharSet utf8mb4 # 其余原有参数保持不变
- 第四步:如果以上操作后仍报错,升级你使用的PowerShell MySQL模块,当前你用的
it.wiechecki.ps.mysql模块依赖的旧版MySql.Data连接器对MariaDB 10.6+的字符集别名适配存在缺陷,可升级模块或替换为适配性更好的基于MySqlConnector的PowerShell MySQL模块。
内容的提问来源于stack exchange,提问作者claeys
相关产品推荐
相关产品推荐

