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

Windows导出SQL文件上传Plesk时的字符集异常问题求助

解决步骤

1. 修正数据库连接的字符集配置

不要用SET NAMES,改用mysqli原生的set_charset方法,确保连接字符集与数据库/表的字符集统一(推荐用utf8mb4,兼容所有UTF-8字符):

$mysqli = new mysqli('localhost', $user, $pass, $name);
// 先检查连接错误
if ($mysqli->connect_error) {
    die('连接失败: ' . $mysqli->connect_error);
}
// 设置连接字符集为utf8mb4
$mysqli->set_charset('utf8mb4');
// 无需再调用select_db,new mysqli时已指定数据库

2. 移除错误的utf8_decode调用

utf8_decode()会把UTF-8字符串转成ISO-8859-1(即Notepad++显示的ANSI),这是导致乱码和文件编码错误的核心原因。直接输出原始UTF-8内容,并在HTTP头里明确编码:

header('Content-Type: text/plain; charset=utf-8'); // 明确告知浏览器内容是UTF-8编码
header("Content-Transfer-Encoding: Binary");
header('Content-disposition: attachment; filename="' . $filename . '"');
echo $content; // 直接输出,不要转码
exit();

3. 统一SQL表定义的字符集

生成CREATE TABLE语句时,把DEFAULT CHARSET=utf8改成DEFAULT CHARSET=utf8mb4,确保导入Plesk时,数据库用兼容的字符集存储数据:

CREATE TABLE `xxx` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `notes` mediumtext NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

4. 验证导出结果

导出后用Notepad++打开文件,编码应显示为UTF-8,特殊字符“èéèàì”能正常显示,此时上传到Plesk就不会出现数据错误。

额外说明

  • MySQL的utf8实际是utf8mb3,仅支持3字节Unicode字符,而utf8mb4支持完整UTF-8(含4字节emoji等),统一用utf8mb4可避免多数编码兼容问题。
  • HTTP头必须指定charset=utf-8,否则浏览器/下载工具会默认用系统编码保存文件,导致编码不符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:25:18