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

PDO连接utf8_general_ci排序规则MySQL表仍区分大小写问题

为啥你的MySQL LIKE查询还是区分大小写?

嘿,我来帮你拆解下这个问题——明明表用了utf8_general_ci(这玩意儿本身就是不区分大小写的排序规则),PDO连接也指定了charset=utf8,为啥执行LIKE查询还是会区分大小写?大概率是这几个环节出了问题:

1. 数据库连接的排序规则没生效

你在PDO的DSN里加了charset=utf8,但有时候这个设置可能没真正生效,导致连接层面的排序规则不是utf8_general_ci。可以先跑这两个SQL确认下当前连接的参数:

SHOW VARIABLES LIKE '%character_set%';
SHOW VARIABLES LIKE '%collation%';

重点看collation_connection的值,如果它不是utf8_general_ci,那连接的排序规则会覆盖表的设置,自然查询就会区分大小写了。

2. 字段自己的排序规则和表不一致

表级的utf8_general_ci不代表每个字段都继承这个设置。说不定你的email字段单独设置了区分大小写的排序规则(比如utf8_bin)。查下表结构就能确认:

SHOW CREATE TABLE primary_profile;

看email字段的定义里有没有COLLATE utf8_bin或者其他区分大小写的规则——字段级的设置优先级比表级高。

3. 试试显式指定排序规则测试

如果以上两点排查完没问题,可以先修改查询语句,显式指定排序规则来验证:

SELECT * FROM primary_profile WHERE email LIKE :email COLLATE utf8_general_ci;

如果这样执行就不区分大小写了,那还是回到前两个点,肯定是连接或字段的排序规则没跟上。

快速修复建议

  • 先确保email字段的排序规则是utf8_general_ci,如果不是,ALTER表修改字段;
  • 如果连接的collation_connection不对,可以在PDO连接后手动执行:
    $conn->exec("SET NAMES utf8 COLLATE utf8_general_ci");
    
    强制设置连接的排序规则;
  • 除非你明确需要区分大小写,否则别给字段用utf8_bin这类排序规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:07:44