上一篇
市场部的小张最近遇到个怪事——他从MySQL导出的客户名单里,"张三"突然排在了"李四"后面,而Excel里明明是按拼音顺序排好的,技术部的老王看了一眼就笑了:"你这问题啊,是没搞懂MySQL的默认排序规则在作怪!"
MySQL的默认排序规则(Collation)实际上是utf8mb4_general_ci(5.7+版本)或utf8mb4_0900_ai_ci(8.0+版本),这个拗口的名字包含三个关键信息:
当排序规则带_ci
后缀时:
SELECT * FROM users ORDER BY name; -- 结果可能是:apple, Banana, cherry(B和b被视为相同)
é、è、ê等会被当作普通e处理:
-- 'café'和'cafe'可能被排在一起
对于中文字符:
常见踩坑场景:
SHOW VARIABLES LIKE 'collation%'; -- 全局规则:collation_server -- 连接规则:collation_connection
建表时指定:
CREATE TABLE users ( name VARCHAR(50) COLLATE utf8mb4_unicode_ci ) DEFAULT COLLATE=utf8mb4_unicode_ci;
查询时临时指定:
SELECT * FROM products ORDER BY name COLLATE utf8mb4_bin;
修改连接配置:
SET NAMES 'utf8mb4' COLLATE 'utf8mb4_zh_0900_as_cs';
utf8mb4_zh_0900_as_cs
_bin
规则 下次当数据排序结果让你挠头时,记得先检查那个藏在角落的COLLATE属性——它可能就是幕后"真凶"。
本文由 翟囡 于2025-07-27发表在【云服务器提供商】,文中图片由(翟囡)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://up.7tqx.com/wenda/462818.html
发表评论