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框架下的具体代码示例,便于开发者根据需求选择合适方案。
鲁飞
鲁飞
扫码关注公众号
还在用多套工具管项目?
一个平台搞定产品、项目、质量与效能,告别整合之苦,实现全流程闭环。
查看方案
鲁飞的其他文章
如何获取指定CSDN博主的全部文章信息
本文说明了爬取 CSDN 作者文章的方法。
GitHub Actions 真香系列之文档自动简繁体转换
GitHub Actions 是 GitHub 推出的 CI\x5cCD 服务,正式版推出后也没有尝试过,最近体验了一下。
微信扫描带参数的二维码事件推送返回 qrscene_0
在调用微信接口时需要注意数据格式,不要只关注参数
怎么使用默认的 PHP 执行 phar 包?
最近在开发一个安装程序的时候,打包为了 phar 包,遇到了一个问题就是打包后的 phar 包不能省略 php 去运行。
使用 acme.sh 自动申请并更新泛域名证书
通过 acme.sh,不仅可以快速申请泛域名证书,还能轻松实现自动更新,降低了 SSL 证书管理的复杂度。
加入社区微信群
与行业大咖零距离交流学习
PMO实践白皮书
白皮书上线
白皮书上线