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框架下的具体代码示例,便于开发者根据需求选择合适方案。
鲁飞
鲁飞
扫码关注公众号
还在用多套工具管项目?
一个平台搞定产品、项目、质量与效能,告别整合之苦,实现全流程闭环。
查看方案
鲁飞的其他文章
GitHub Actions 真香系列之文档自动简繁体转换
GitHub Actions 是 GitHub 推出的 CI\x5cCD 服务,正式版推出后也没有尝试过,最近体验了一下。
新注册的域名被微信拦截怎么处理?
前段时间新注册了一个域名,没有在微信测试访问,等用到的时候发现居然被微信拦截了...
怎么分别给公司和个人项目设置 Git User?
从第一天使用 Git 开始,每个人都逃不过这个配置
你不知道的PHP小技巧之计算文本相似度
有这样一个需求:需要对于用户发布的内容标题进行相似度对比,如果有之前的内容和当前发布的内容标题相似度到达某个阈值时则禁止发布或进行其他的一些操作。
HMAC 签名编码的坑:Go 和 PHP 的不同处理方式
本文将以 Go 和 PHP 为例,探讨为什么直接对 HMAC 签名进行 Base64 编码与先转换为 16 进制字符串再编码的结果不同。
加入社区微信群
与行业大咖零距离交流学习
PMO实践白皮书
白皮书上线
白皮书上线