MySQL 字符集与大小写敏感性解析

大小写 MySQL 查询 区分 admin
发布于 2026-06-12
97

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

扫码阅读
手机扫码阅读

文章主旨:在MySQL中,UTF-8编码默认不区分大小写,可通过修改排序规则或使用BINARY关键字实现大小写敏感查询,在ThinkPHP框架中应使用whereRaw执行原生查询来确保精确匹配。

关键要点:

  • MySQL的utf8最多支持3字节(不含部分Emoji),utf8mb4支持4字节,可完整存储所有Unicode字符。
  • 排序规则(Collation)决定大小写敏感性:_ci(如utf8_general_ci)不区分大小写;_bin(如utf8_bin)区分大小写;_unicode_ci不区分大小写且更符合Unicode规范。
  • 默认使用_general_ci时,LIKE=查询不区分大小写,例如WHERE username = 'admin'会同时匹配AdminADMIN等。
  • 区分大小写的方法:修改列的排序规则为utf8mb4_bin,或在查询中使用BINARY关键字,如WHERE BINARY username = 'admin'
  • ThinkPHP框架中where方法不支持BINARY,应使用whereRaw执行原生查询,例如whereRaw("BINARY username = ?", ['admin'])

内容结构:

  1. MySQL中的UTF-8变体:介绍utf8(3字节)与utf8mb4(4字节)的区别,后者能存储完整Unicode,包括Emoji。
  2. 字符集与排序规则:说明常见排序规则对大小写敏感性的影响——_ci不区分大小写,_bin严格区分,_unicode_ci不区分大小写且更准确。
  3. MySQL大小写搜索问题:举例默认不区分大小写的行为;给出两种解决方案:修改排序规则(ALTER TABLE ... MODIFY ... COLLATE utf8mb4_bin)或使用BINARY关键字(WHERE BINARY username = 'admin')。
  4. 在ThinkPHP中使用whereRaw进行原生查询:由于默认where不支持BINARY,推荐用whereRaw执行原生SQL,参数绑定方式传递变量,示例包括=LIKE查询。
  5. 总结:重申默认不区分大小写,两种实现大小写敏感的方法,以及在ThinkPHP中通过whereRaw实现。

文章总结:本文为MySQL字符集大小写敏感性提供了清晰的实践指南,并给出了ThinkPHP框架下的具体代码示例,便于开发者根据需求选择合适方案。

鲁飞