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框架下的具体代码示例,便于开发者根据需求选择合适方案。
鲁飞
鲁飞
扫码关注公众号
还在用多套工具管项目?
一个平台搞定产品、项目、质量与效能,告别整合之苦,实现全流程闭环。
查看方案
鲁飞的其他文章
通过微信开放平台授权获取公众号文章
如果想要实现一个将公众号文章搬运到某个社区中去发布的功能,除了使用爬虫等方法,还可以通过微信开放平台授权,调用官方接口来获取公众号文章。
使用 acme.sh 自动申请并更新泛域名证书
通过 acme.sh,不仅可以快速申请泛域名证书,还能轻松实现自动更新,降低了 SSL 证书管理的复杂度。
使用Composer Scripts为依赖进行瘦身
常见的 SDK 都会将所有功能都集成在一个代码库中,本文以腾讯云开发者工具套件(SDK)3.0 为例。
你不知道的PHP小技巧之计算文本相似度
有这样一个需求:需要对于用户发布的内容标题进行相似度对比,如果有之前的内容和当前发布的内容标题相似度到达某个阈值时则禁止发布或进行其他的一些操作。
MacOS 等机器配置 Docker 启用 Remote API
Docker 不仅可以通过本地命令行docker命令进行调用,还可以通过开启远程控制 API,使用 HTTP
加入社区微信群
与行业大咖零距离交流学习
PMO实践白皮书
白皮书上线
白皮书上线