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

更换Hostinger主机后emoji正常但LIKE查询无结果求助

解决Hostinger服务器Emoji显示与LIKE搜索冲突问题

我刚梳理完你的问题,这其实是utf8mb4字符集与排序规则不匹配导致的典型场景,咱们一步步来搞定:

问题根源拆解

  1. 为什么换Hostinger后Emoji乱码?
    你的本地和GoDaddy服务器默认可能已经隐式支持utf8mb4(真正能容纳4字节Emoji的UTF-8子集),但Hostinger的默认配置还是旧的utf8(仅支持3字节Unicode字符),直接迁移后Emoji自然变成乱码。
  2. 为什么改utf8mb4_bin后搜索失效?
    utf8mb4_bin是二进制排序规则,它会严格按照字符的二进制值做匹配——不仅区分大小写,连字符的Unicode编码细节都会死磕,这就导致你的LIKE '%some name%'无法匹配存储内容(比如大小写差异、编码对齐问题),phpMyAdmin里搜索失效也是同样道理。

分步解决方案

1. 统一数据库/表/列的字符集与排序规则

把所有相关对象的字符集改成utf8mb4,排序规则用**utf8mb4_unicode_ci**(或utf8mb4_general_ci,前者更符合Unicode标准),别再用bin:

-- 修改数据库默认字符集
ALTER DATABASE 你的数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 修改目标表的字符集(会自动同步列的设置)
ALTER TABLE allfiles CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 如果列没自动同步,单独修改列(可选)
ALTER TABLE allfiles MODIFY COLUMN file_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. 修复PHP数据库连接的字符集配置

你之前手动执行SET语句的方式不够可靠,直接用MySQLi的专用函数设置连接字符集,它会同时搞定客户端、连接、结果集的编码对齐:

// 数据库连接成功后,立即执行这行代码
mysqli_set_charset($con, 'utf8mb4');

// 替代你之前的4条SET语句,这一行就够了

3. 确保页面输出编码正确

在PHP页面开头加上编码声明,避免前端显示时出现编码混乱:

header('Content-Type: text/html; charset=utf-8');

同时在HTML的<head>里补上:

<meta charset="UTF-8">

验证效果

做完以上三步后:

  • Emoji应该能正常显示(utf8mb4完美支持4字节字符)
  • SELECT * FROM allfiles WHERE file_name LIKE '%some name%'会正常返回匹配结果(utf8mb4_unicode_ci是不区分大小写的排序规则,和你之前在GoDaddy/本地的逻辑一致)
  • phpMyAdmin里的搜索功能也会恢复正常

补充说明

为什么本地和GoDaddy没这个问题?大概率是这两个环境的数据库默认配置已经启用了utf8mb4,或者表的默认排序规则就是utf8mb4_unicode_ci,不需要手动调整。Hostinger的默认配置更保守,所以需要咱们手动统一编码规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:56:19