如何在PhpMyAdmin中导出含emoji表情的数据库?
解决phpMyAdmin导出/导入时Emoji变???的问题
一、先试试phpMyAdmin自带的方法(不用写代码)
虽然导出选项里只显示UTF-8,但只要设置到位,照样能导出支持utf8mb4(包含Emoji)的内容:
先确认数据库/表的字符集
检查你的数据库和目标表是不是utf8mb4字符集,排序规则选utf8mb4_unicode_ci或者utf8mb4_general_ci。如果不是,进phpMyAdmin对应表的「操作」标签,直接修改表的字符集和排序规则。导出时的关键设置
- 选「自定义」导出模式,别用快速导出。
- 「格式特定选项」里字符集选UTF-8,记得勾选「添加DROP TABLE / VIEW / PROCEDURE...语句」,这样导入时能重建表结构,避免字符集不兼容。
- 展开「输出」部分,勾选「保存文件」,字符集保持UTF-8。
- 重点:在「SQL选项」里找「CREATE TABLE选项」,手动添加
CHARSET=utf8mb4;如果是默认的CREATE TABLE模板,导出后可以手动把里面的DEFAULT CHARSET=utf8改成DEFAULT CHARSET=utf8mb4。
导入时的设置
- 导入前先确认目标数据库是
utf8mb4字符集。 - 导入选「自定义」模式,字符集选UTF-8,「SQL执行选项」里勾上「允许中断的导入」,确保完整UTF-8支持。
- 导入完检查下表的字符集,要是不对就手动改回去。
- 导入前先确认目标数据库是
二、实在不行就自己写PHP导出函数
如果上面的方法不管用,那就自己写个PHP脚本导出,核心是全程用utf8mb4连接数据库:
第一步:用utf8mb4连接数据库
$host = 'localhost'; $dbname = '你的数据库名'; $username = '你的用户名'; $password = '你的密码'; // PDO连接必须指定utf8mb4 try { $pdo = new PDO( "mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ] ); } catch (PDOException $e) { die("连接失败: " . $e->getMessage()); }
第二步:导出表结构和数据
// 获取所有表名 $tables = $pdo->query("SHOW TABLES")->fetchAll(PDO::FETCH_COLUMN); $exportContent = "-- 数据库导出(支持Emoji)\n-- 导出时间: " . date('Y-m-d H:i:s') . "\n\n"; foreach ($tables as $table) { // 导出表结构,替换成utf8mb4 $createTable = $pdo->query("SHOW CREATE TABLE `$table`")->fetch(PDO::FETCH_ASSOC); $createSql = str_replace('DEFAULT CHARSET=utf8', 'DEFAULT CHARSET=utf8mb4', $createTable['Create Table']); $exportContent .= $createSql . ";\n\n"; // 导出表数据 $rows = $pdo->query("SELECT * FROM `$table`")->fetchAll(); if (!empty($rows)) { $columns = array_keys($rows[0]); $columnNames = implode('`, `', $columns); $exportContent .= "INSERT INTO `$table` (`$columnNames`) VALUES\n"; $valuesArr = []; foreach ($rows as $row) { $values = []; foreach ($row as $value) { if ($value === null) { $values[] = 'NULL'; } else { // 用PDO的quote方法转义,保证utf8mb4兼容 $values[] = $pdo->quote($value); } } $valuesArr[] = '(' . implode(', ', $values) . ')'; } $exportContent .= implode(",\n", $valuesArr) . ";\n\n"; } } // 生成下载文件 $filename = $dbname . '_export_' . date('YmdHis') . '.sql'; header('Content-Type: text/plain; charset=utf-8'); header('Content-Disposition: attachment; filename="' . $filename . '"'); echo $exportContent; exit;
注意点
- 这个脚本需要PHP启用PDO扩展,而且数据库账号要有SELECT权限。
- 导出的SQL文件直接在phpMyAdmin导入就行,导入时记得目标数据库/表是utf8mb4字符集。
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

