如何在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
相关产品推荐
相关产品推荐

