MySQL 字符集与大小写敏感性解析
版权声明
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
鲁飞
扫码关注公众号
扫码阅读
手机扫码阅读
文章主旨:在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'会同时匹配Admin、ADMIN等。 - 区分大小写的方法:修改列的排序规则为
utf8mb4_bin,或在查询中使用BINARY关键字,如WHERE BINARY username = 'admin'。 - ThinkPHP框架中
where方法不支持BINARY,应使用whereRaw执行原生查询,例如whereRaw("BINARY username = ?", ['admin'])。
内容结构:
- MySQL中的UTF-8变体:介绍utf8(3字节)与utf8mb4(4字节)的区别,后者能存储完整Unicode,包括Emoji。
- 字符集与排序规则:说明常见排序规则对大小写敏感性的影响——
_ci不区分大小写,_bin严格区分,_unicode_ci不区分大小写且更准确。 - MySQL大小写搜索问题:举例默认不区分大小写的行为;给出两种解决方案:修改排序规则(
ALTER TABLE ... MODIFY ... COLLATE utf8mb4_bin)或使用BINARY关键字(WHERE BINARY username = 'admin')。 - 在ThinkPHP中使用whereRaw进行原生查询:由于默认
where不支持BINARY,推荐用whereRaw执行原生SQL,参数绑定方式传递变量,示例包括=和LIKE查询。 - 总结:重申默认不区分大小写,两种实现大小写敏感的方法,以及在ThinkPHP中通过
whereRaw实现。
文章总结:本文为MySQL字符集大小写敏感性提供了清晰的实践指南,并给出了ThinkPHP框架下的具体代码示例,便于开发者根据需求选择合适方案。
鲁飞
鲁飞
扫码关注公众号
还在用多套工具管项目?
一个平台搞定产品、项目、质量与效能,告别整合之苦,实现全流程闭环。
查看方案
鲁飞的其他文章
PIE:PHP 扩展管理的未来,替代 PECL 的新选择
PIE 是一个为 PHP 提供扩展安装和管理的新工具,旨在替代传统的 PECL
Think-Swoole如何设置Swoole提供的配置项
think-swoole 的文档极少,官方文档中也只是说了如何启动、热更新、连接池等配置
腾讯企业邮箱收不到邮件怎么回事
原因就是域名解析 CNAME 和 MX 记录冲突所导致的。
解决 macOS 下 PostgreSQL 服务启动失败
使用 brew 安装的 PostgreSQL 服务,不知道什么时候升级了版本...
Docsify v5.0.0-rc.3:支持 GitHub 风格的提示框
无论是 GitHub 风格的提示框、跨文档片段提取,还是更稳定的 Slug 规则,都让文档编写更加直观、可靠。
加入社区微信群
与行业大咖零距离交流学习
PMO实践白皮书
白皮书上线
白皮书上线