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

解决PHP与MySQL从Latin1转UTF8后的字符集及LIKE搜索问题

从Latin1/ISO-8859-1切换到UTF-8的完整解决步骤

1. 先备份原始数据(关键前置操作)

  • 导出数据库的Latin1编码原始数据,禁止用UTF-8编辑器修改备份文件:
    mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > backup_latin1.sql

2. 调整数据库与表的编码规则

  • 修改数据库默认编码为utf8mb4(完整UTF-8支持,替代MySQL原生不完整的utf8):
    ALTER DATABASE 数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • 批量修改现有表的编码(自动转换数据编码):
    ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    (多表可编写脚本批量执行)

3. 统一前端与文件编码

  • 所有PHP文件保存为UTF-8无BOM格式,防止页面开头出现乱码字符。
  • 更新HTML编码声明:
    <meta charset="utf-8">(HTML5标准写法)
    或兼容旧版本的:
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />

4. 修正数据库连接的字符集设置

  • 在PHP建立MySQL连接后,立即设置连接字符集为utf8mb4,确保数据传输编码一致:
$mysqli = new mysqli('数据库主机', '用户名', '密码', '数据库名');
if ($mysqli->connect_error) {
    die('连接失败: ' . $mysqli->connect_error);
}
// 设置连接字符集
$mysqli->set_charset('utf8mb4');

5. 重新导入数据并验证

  • 使用命令行导入备份的Latin1数据,指定导入字符集为Latin1,让MySQL自动转码到utf8mb4:
    mysql -u 用户名 -p --default-character-set=latin1 数据库名 < backup_latin1.sql
  • 验证数据显示正常后,测试%LIKE%搜索功能:utf8mb4_unicode_ci是不区分大小写的排序规则,能正常支持模糊搜索——之前用utf8_bin是二进制匹配,会导致搜索失效。

6. 全面验证场景

  • 测试页面静态文本、数据库内容显示、新增数据的存储与读取、模糊搜索等功能是否全部正常。
  • 后续开发的PHP文件统一使用UTF-8无BOM格式,避免编码问题复发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:30:47