You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中正确导入含UTF-8字符的MariaDB数据库Dump文件

解决PowerShell导入MariaDB Dump文件的UTF-8乱码问题

问题场景

在CMD中导入MariaDB Dump文件可正常执行,命令如下:

tar -xf dump.zip
mysql.exe --user=Username --password=Password Database < dump.sql

但在PowerShell中使用以下命令导入时,Dump文件中的UTF-8字符显示为??乱码:

Expand-Archive -Path dump.zip
Get-Content dump.sql | mysql.exe --user=Username --password=Password Database

已确认:

  • Dump文件为UTF-8格式(Notepad++验证)
  • Dump文件由MariaDB 10.6.18生成,包含正确字符集设置:
    /*!40101 SET NAMES utf8mb4 */;
    
    且每个表前有:
    /*!40101 SET character_set_client = utf8 */;
    
  • 导入目标为同版本MariaDB 10.6.18,Expand-Archive解压结果与CMD中tar -xf完全一致

可行解决方案

方案1:给Get-Content指定UTF-8编码

PowerShell中Get-Content默认编码可能不是UTF-8(如PowerShell 5.1默认用ANSI),显式指定编码即可避免乱码:

Expand-Archive -Path dump.zip
Get-Content dump.sql -Encoding utf8 | mysql.exe --user=Username --password=Password Database

方案2:调用CMD执行重定向

直接借助CMD的重定向功能,绕过PowerShell的编码转换问题:

Expand-Archive -Path dump.zip
cmd /c "mysql.exe --user=Username --password=Password Database < dump.sql"

方案3:使用cat命令(PowerShell 7+)

PowerShell 7及以上版本中,cat是Get-Content的别名,同样可以指定编码:

Expand-Archive -Path dump.zip
cat dump.sql -Encoding utf8 | mysql.exe --user=Username --password=Password Database

原因说明

CMD的<重定向是直接按原始字节流传递文件内容,不会进行编码转换;而PowerShell的Get-Content默认会根据系统编码读取文件,若未显式指定UTF-8,会导致UTF-8字符被错误转换,最终导入数据库时出现乱码。

内容的提问来源于stack exchange,提问作者theking2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 06:14:54