当前位置: 首页 > article >正文

MySQL 比较规则(Collation)详解

一、概述比较规则Collation是一组定义如何比较和排序字符集中字符的规则。它决定了字符串的大小写是否敏感A a重音符号是否敏感é e多语言字符的排序顺序例如瑞典语中Ö排在Z之后字符串的相等性判断和ORDER BY 结果比较规则始终依附于某个字符集Character Set两者相辅相成。MySQL 中每个字符集至少有一个默认比较规则并支持多个可选的比较规则。二、比较规则的核心概念2.1 字符集 vs 比较规则维度字符集Character Set比较规则Collation定义字符到二进制字节的编码映射字符之间比较、排序的规则示例utf8mb4, latin1, gbkutf8mb4_unicode_ci, latin1_swedish_ci决定如何存储数据如何比较、排序、分组数据2.2 比较规则的主要属性大小写敏感Case SensitivityA和a是否视为相同字符。重音敏感Accent Sensitivityé和e是否视为相同字符。二进制Binary直接比较字符的二进制编码值最为严格。多语言排序Language-specific某些语言中字母的顺序与英语不同如德语ß排序等同于ss。2.3 比较规则命名规范MySQL 比较规则命名格式为字符集名称_语言/通用_敏感度或字符集名称_bin常见后缀及含义后缀含义示例_ciCase Insensitive大小写不敏感utf8mb4_general_ci_csCase Sensitive大小写敏感utf8mb4_cs部分字符集支持_aiAccent Insensitive重音不敏感utf8mb4_unicode_aiMySQL 8.0_asAccent Sensitive重音敏感utf8mb4_unicode_as_binBinary二进制比较utf8mb4_bin_0900_ai_ci基于 UCA 9.0.0不区分大小写/重音MySQL 8.0 默认utf8mb4_0900_ai_ci命名示例解读utf8mb4_general_ci字符集为utf8mb4通用规则大小写不敏感A a重音敏感é ≠ e。utf8mb4_unicode_ci基于 Unicode 排序标准大小写不敏感重音不敏感é e排序更准确但稍慢。utf8mb4_0900_ai_ci基于 UCA 9.0.0同时忽略大小写和重音MySQL 8.0 默认。utf8mb4_bin直接比较二进制值A的编码 0x41 小于a的 0x61严格区分大小写和重音。三、常用比较规则详解3.1 utf8mb4 字符集的常用比较规则比较规则大小写重音特点推荐场景utf8mb4_general_ci不敏感敏感速度快部分特殊字符排序不准确如 ß 排序为 s 而非 ss对排序准确性要求不高的英文/中文环境utf8mb4_unicode_ci不敏感不敏感基于 Unicode 标准排序准确性能略低于 general多语言国际化应用utf8mb4_0900_ai_ci不敏感不敏感MySQL 8.0 默认基于 UCA 9.0.0准确性和性能平衡MySQL 8.0 推荐默认选择utf8mb4_bin敏感敏感直接比较二进制值需要区分大小写、存储哈希值、唯一标识符utf8mb4_unicode_520_ci不敏感不敏感基于 UCA 5.2.0MySQL 5.6 引入中间版本兼容性3.2 latin1 字符集示例比较规则说明latin1_swedish_ciLatin1 默认瑞典语排序Ö 排在 Z 之后latin1_general_ci通用规则Ö O排序与英语类似latin1_bin二进制比较3.3 比较规则对排序的影响实例-- 创建测试表 CREATE TABLE collation_test ( name VARCHAR(10) ) CHARACTER SET utf8mb4; -- 插入数据 INSERT INTO collation_test VALUES (A), (a), (B), (b), (Ö), (O); -- 使用 utf8mb4_general_ci 排序重音敏感Ö ≠ O ALTER TABLE collation_test MODIFY name VARCHAR(10) COLLATE utf8mb4_general_ci; SELECT * FROM collation_test ORDER BY name; -- 结果A, a, B, b, O, Ö大写字母排在前小写在后Ö 视为独立字符 -- 使用 utf8mb4_unicode_ci 排序重音不敏感Ö O ALTER TABLE collation_test MODIFY name VARCHAR(10) COLLATE utf8mb4_unicode_ci; SELECT * FROM collation_test ORDER BY name; -- 结果A, a, O, Ö, B, bO 和 Ö 被视为等同按原始顺序排列 -- 使用 utf8mb4_bin 排序严格二进制 ALTER TABLE collation_test MODIFY name VARCHAR(10) COLLATE utf8mb4_bin; SELECT * FROM collation_test ORDER BY name; -- 结果A, B, O, a, b, Ö按 ASCII/Unicode 码点排序四、比较规则的作用范围比较规则可以在以下层级指定优先级从低到高层级设置方式默认继承服务器级collation_server 变量编译时默认或配置文件数据库级CREATE DATABASE ... COLLATE继承服务器级表级CREATE TABLE ... COLLATE继承数据库级列级列定义中的 COLLATE继承表级查询级表达式中的 COLLATE 子句临时覆盖查看当前各层级比较规则SHOW VARIABLES LIKE collation%; -- 服务器和连接级 SELECT DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME your_db; SHOW CREATE TABLE your_table; -- 表级和列级五、比较规则对操作的影响5.1 字符串比较WHERE, JOIN, GROUP BY比较规则直接决定、LIKE、IN、GROUP BY等操作的行为。-- 大小写不敏感时查询 abc 能匹配 ABC SELECT * FROM t WHERE name abc; -- 如果 collation 是 _ci返回大小写所有匹配 -- 大小写敏感时必须精确匹配 SELECT * FROM t WHERE name abc; -- 只返回 abc不返回 ABC5.2 排序ORDER BY不同比较规则会导致相同的ORDER BY产生不同的结果顺序特别是涉及特殊字母或大小写时。5.3 索引使用MySQL 索引基于列的比较规则构建。当查询条件中使用了与列不同的比较规则时索引可能失效。-- 列 collation utf8mb4_unicode_ci查询时使用 utf8mb4_bin SELECT * FROM t WHERE name abc COLLATE utf8mb4_bin; -- 无法使用索引需要全表扫描最佳实践保持查询条件和列使用相同的比较规则或在连接级别统一。5.4 性能差异_general_ci比较快但某些语言排序不精确。_unicode_ci及_0900_ai_ci更准确但内部需要更复杂的映射表性能稍低通常差距可接受。_bin最快直接字节比较但严格区分大小写和重音。六、比较规则的查看与设置6.1 查看可用比较规则-- 查看所有比较规则 SHOW COLLATION; -- 查看特定字符集的比较规则 SHOW COLLATION WHERE Charset utf8mb4; -- 查看默认比较规则 SHOW CHARACTER SET LIKE utf8mb4;6.2 设置比较规则服务器级永久编辑/etc/my.cnf[mysqld] collation-server utf8mb4_unicode_ci character-set-server utf8mb4连接级临时SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci; -- 或单独设置 SET collation_connection utf8mb4_unicode_ci;数据库级CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 修改已有数据库 ALTER DATABASE mydb COLLATE utf8mb4_unicode_ci;表级CREATE TABLE t (id INT) COLLATE utf8mb4_unicode_ci; ALTER TABLE t COLLATE utf8mb4_bin; -- 只改默认不影响已有列列级CREATE TABLE t (name VARCHAR(10) COLLATE utf8mb4_unicode_ci); ALTER TABLE t MODIFY name VARCHAR(10) COLLATE utf8mb4_bin;查询级覆盖SELECT * FROM t WHERE name abc COLLATE utf8mb4_bin; SELECT * FROM t ORDER BY name COLLATE utf8mb4_bin;七、常见问题与陷阱7.1 大小写不敏感带来的意外匹配-- 用户表用户名唯一且大小写不敏感 CREATE TABLE users (username VARCHAR(20) COLLATE utf8mb4_general_ci UNIQUE); INSERT INTO users VALUES (Admin); INSERT INTO users VALUES (admin); -- 报错Duplicate entry admin与 Admin 冲突解决使用utf8mb4_bin或utf8mb4_cs比较规则或应用层校验。7.2 排序结果与预期不符-- 德语中 ß 应该排在 ss 附近但 utf8mb4_general_ci 中 ß 被视为 s SELECT * FROM german_words ORDER BY word COLLATE utf8mb4_general_ci; -- 结果不准确 SELECT * FROM german_words ORDER BY word COLLATE utf8mb4_unicode_ci; -- 准确7.3 隐式转换导致索引失效-- 列 collation 为 utf8mb4_unicode_ci连接 collation 为 utf8mb4_general_ci SELECT * FROM t WHERE name abc; -- MySQL 需要转换列值无法使用索引解决统一连接和列的 collation或在查询中显式使用相同的 collation。7.4 不同字符集之间的比较-- 列是 utf8mb4常量是 latin1 字符集 SELECT * FROM t WHERE name _latin1abc; -- 会触发字符集转换可能导致索引失效或错误建议避免跨字符集比较必要时显式转换CONVERT(name USING latin1)。八、如何选择合适的比较规则8.1 决策树是否需要严格区分大小写/重音是 → 使用_bin或_cs如utf8mb4_bin否 → 下一步是否主要处理英文/数字/中文对排序准确性要求不高 →utf8mb4_general_ci性能好需要准确的多语言排序德语、法语、瑞典语等→ 下一步MySQL 版本8.0 →utf8mb4_0900_ai_ci最佳平衡5.7 及以下 →utf8mb4_unicode_ci8.2 典型场景推荐场景推荐比较规则英文博客、日志系统utf8mb4_general_ci国际化社交应用utf8mb4_0900_ai_ci8.0或 utf8mb4_unicode_ci用户登录名需区分大小写utf8mb4_bin唯一标识符UUID、Tokenutf8mb4_bin全文检索与字段存储规则一致通常 utf8mb4_unicode_ci中文为主的系统utf8mb4_general_ci 或 utf8mb4_unicode_ci 均可中文排序按拼音或笔画需额外处理九、高级主题比较规则与字符集转换9.1 表达式中的 COLLATE 子句-- 强制使用特定比较规则 SELECT a A COLLATE utf8mb4_bin; -- 返回 0 SELECT a A COLLATE utf8mb4_general_ci; -- 返回 1 -- 混合比较时需要显式指定 SELECT name FROM t WHERE name abc COLLATE utf8mb4_bin;9.2 字符集转换函数-- 转换字符集并保留原有比较规则 SELECT CONVERT(name USING utf8mb4) FROM t; -- 同时改变比较规则 SELECT CAST(name AS CHAR CHARACTER SET utf8mb4) COLLATE utf8mb4_bin FROM t;十、总结要点说明比较规则决定比较、排序、分组的行为与字符集紧密相关命名后缀 _ci, _cs, _ai, _as, _bin 表示敏感属性了解含义便于选择MySQL 8.0 推荐 utf8mb4_0900_ai_ci平衡准确性和性能严格区分大小写/重音时用 _bin例如用户名、密码哈希保持层级一致服务器、数据库、表、列、连接尽量统一注意索引使用比较规则不一致会导致索引失效快速检查清单[ ] 确认数据库默认比较规则符合业务需求[ ] 重要表的字符串列使用合适的比较规则[ ] 应用连接使用SET NAMES ... COLLATE ...统一[ ] 避免在查询中隐式或显式使用不同的比较规则[ ] 测试 ORDER BY 结果是否符合预期

相关文章:

MySQL 比较规则(Collation)详解

一、概述 比较规则(Collation) 是一组定义如何比较和排序字符集中字符的规则。它决定了: 字符串的大小写是否敏感(A a?)重音符号是否敏感( e?)多语言字符的排序顺序&…...

月薪8K到年薪80万!这个AI职位一年暴涨985%,普通人如何抓住风口?2026年最火爆的5个岗位+3条入场路径全解析!

文章讲述了AI Agent开发工程师的兴起,年薪可达80万。文章以小李的真实故事为例,展示了通过主动学习AI技术,可以实现职业的巨大转变。文章还分析了Agentic AI的特点及其对就业市场的影响,指出40%的岗位将被重新定义。文章列举了AI …...

基于RK3568与CODESYS的工业边缘控制器:软PLC如何重塑自动化设备核心

1. 为什么工业自动化需要软PLC? 记得五年前我第一次接触传统PLC时,被它的价格吓了一跳。一台西门子S7-1200基础型号就要上万元,加上各种扩展模块轻松突破两万。更让我头疼的是,每次设备升级都要重新采购硬件,旧设备只能…...

终极Flash浏览器指南:如何在现代浏览器中畅玩经典Flash游戏

终极Flash浏览器指南:如何在现代浏览器中畅玩经典Flash游戏 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 你是否还在为无法玩到童年记忆中的Flash游戏而烦恼?当主…...

冠珠瓷砖×莫氏鸡煲×叠滘东胜东队,德叔有请,莫叔掌勺,“力撑”叠滘龙船传承

5月10日,2026叠滘龙船漂移大赛金牌合作伙伴冠珠瓷砖品牌代表、新明珠集团董事长叶德林“德叔”有请,莫氏鸡煲创始人“莫叔”掌勺,携火爆全网的莫氏祛湿鸡煲、紫洞黄皮酒,探班叠滘东胜东队训练场。当天下午,德叔、莫叔还…...

特征工程:从数据到特征

特征工程:从数据到特征 1. 技术分析 1.1 特征工程流程 特征工程是机器学习的核心环节: 特征工程流程数据理解 → 特征提取 → 特征选择 → 特征转换 → 特征验证1.2 特征类型 类型描述处理方法数值型连续数值归一化、标准化分类型类别标签独热编码、…...

强化学习在推测执行漏洞挖掘中的应用与实践

1. 推测执行漏洞与安全挑战现代处理器中的推测执行技术通过预测分支路径提前执行指令,大幅提升了指令级并行性。当处理器遇到条件分支时,它会根据历史记录预测分支走向,并提前执行预测路径上的指令。如果预测正确,可以节省约10-15…...

计网实验一

课程实验报告专 业:物联网工程 班 级:2303学 号:231040700302 姓 名:杜子健实验名称:实验一实验类型:实验实验日期:2025年11月12日一 实…...

WSA Toolbox:Windows 11上5分钟搭建Android应用生态的终极指南

WSA Toolbox:Windows 11上5分钟搭建Android应用生态的终极指南 【免费下载链接】wsa-toolbox A Windows 11 application to easily install and use the Windows Subsystem For Android™ package on your computer. 项目地址: https://gitcode.com/gh_mirrors/ws…...

XUnity.AutoTranslator完整指南:让外语游戏瞬间变中文的免费神器

XUnity.AutoTranslator完整指南:让外语游戏瞬间变中文的免费神器 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为语言障碍而无法畅玩海外Unity游戏吗?XUnity.AutoTranslator…...

AGENTS.md:为AI编码助手定制的项目说明书,提升人机协作效率

1. 项目概述:为什么你的项目需要一个“AI专属说明书”?如果你最近在尝试用GitHub Copilot、Cursor或者Claude Code来辅助开发,大概率遇到过这样的场景:你满怀期待地给AI下达一个指令,比如“帮我给这个React组件添加一个…...

离散化离散化差分

数组开不了1e9&#xff0c;但是好在坐标点会很分散&#xff0c;那么相当于将点“挤到”1-n的位置&#xff0c;一个位置映射了一个坐标点&#xff0c;排序后&#xff0c;坐标的相对位置并不发生改变&#xff0c;离散化由此得来。#include<bits/stdc.h> #define int long l…...

开源项目发布自动化:GitHub与ClawHub技能包一键发布工具详解

1. 项目概述与核心价值如果你和我一样&#xff0c;经常需要将本地开发的项目&#xff0c;尤其是那些为ClawHub平台准备的技能包&#xff0c;发布到GitHub并同步推送到ClawHub技能市场&#xff0c;那你一定对下面这个场景不陌生&#xff1a;每次发布前&#xff0c;都要在脑子里重…...

5个高效处理PDF的Windows命令行工具:Poppler完整解决方案

5个高效处理PDF的Windows命令行工具&#xff1a;Poppler完整解决方案 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 在Windows平台上处理PDF文档时…...

Display Driver Uninstaller:Windows显卡驱动终极清理方案

Display Driver Uninstaller&#xff1a;Windows显卡驱动终极清理方案 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers-uninstal…...

基于Remix与React构建隐私优先的订阅费用追踪器Subs

1. 项目概述&#xff1a;一个纯粹、高效的订阅费用追踪器在数字订阅服务泛滥的今天&#xff0c;你是否也常常感到困惑&#xff1a;每个月到底有多少笔自动扣款&#xff1f;Netflix、Spotify、各种云服务、会员费……这些零散的费用加起来&#xff0c;一年可能是一笔不小的开销。…...

专业指南:高效在ARM设备上运行x86_64程序的完整解决方案

专业指南&#xff1a;高效在ARM设备上运行x86_64程序的完整解决方案 【免费下载链接】box64 Box64 - Linux Userspace x86_64 Emulator with a twist, targeted at ARM64, RV64 and LoongArch Linux devices 项目地址: https://gitcode.com/gh_mirrors/bo/box64 你是否正…...

QMCDecode:让QQ音乐加密文件重获自由的Mac专属工具

QMCDecode&#xff1a;让QQ音乐加密文件重获自由的Mac专属工具 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac&#xff0c;qmc0,qmc3转mp3, mflac,mflac0等转flac)&#xff0c;仅支持macOS&#xff0c;可自动识别到QQ音乐下载目录&#xff0c;默认转换…...

基于Next.js urborepo的企业级电商全栈架构实战解析

1. 项目概述与核心价值最近在梳理企业级电商项目的技术选型与架构方案&#xff0c;发现了一个非常值得深入研究的开源项目——Blazity/enterprise-commerce。这不仅仅是一个简单的电商模板&#xff0c;而是一个基于Next.js 14、TypeScript和Turborepo构建的现代化、全栈式企业级…...

QMCDecode终极指南:一键解锁QQ音乐加密音频的完整解决方案

QMCDecode终极指南&#xff1a;一键解锁QQ音乐加密音频的完整解决方案 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac&#xff0c;qmc0,qmc3转mp3, mflac,mflac0等转flac)&#xff0c;仅支持macOS&#xff0c;可自动识别到QQ音乐下载目录&#xff0c;默…...

支持多渠道的语音机器人 2026 企业选型攻略:智能核心引擎

在客户体验驱动业务增长的时代&#xff0c;企业热线早已不是“有人接电话”那么简单。随着大模型技术与通信系统的深度融合&#xff0c;多渠道语音机器人正从传统的“按键导航”进化为能够理解情绪、动态决策的智能客服专家。2026年&#xff0c;如何选择一款真正适配业务场景、…...

5分钟掌握RePKG:Wallpaper Engine资源提取与格式转换的终极秘籍

5分钟掌握RePKG&#xff1a;Wallpaper Engine资源提取与格式转换的终极秘籍 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 你是否曾经面对Wallpaper Engine中的PKG资源包感到无从下…...

基于C语言实现(控制台)小型文件系统

♻️ 资源 大小&#xff1a; 3.40MB ➡️ 资源下载&#xff1a;https://download.csdn.net/download/s1t16/87430288 小型文件系统 一、需求分析 1.1 小型文件系统介绍 科技的进步已将人类带入了信息大爆炸的时代&#xff0c;随着计算机科学技术的不断发展&#xff0c;计算…...

开源首发:DocCenter — AI 时代的 HTML工作台深度解析

Tags&#xff1a;Python aiohttp 开源项目 AI工具 前端工程 工具分享 Claude ChatGPT 专栏&#xff1a;「工具开源」/「DocCenter」 一、痛点&#xff1a;AI 时代的文档散落病 过去一年&#xff0c;我每天被 AI 生成的 HTML 文件淹没。 Claude artifacts 一天 20 个、ChatGPT…...

React Hook useVibe:声明式时序管理与交互感知的工程实践

1. 项目概述&#xff1a;一个能“感知”用户意图的React Hook 最近在做一个需要深度交互的前端项目&#xff0c;遇到了一个挺有意思的痛点&#xff1a;如何让UI组件不只是被动地响应事件&#xff0c;而是能更“聪明”地理解用户的交互意图&#xff0c;甚至预判下一步操作&#…...

开源首发:DocCenter — 本地 HTML 工作台,治好 AI 时代的文档散落病

Tags&#xff1a;Python aiohttp 开源项目 AI工具 前端工程 全栈 工具分享 一、痛点&#xff1a;AI 时代的文档散落病 &#xff08;对比传统文档管理 vs AI 生成文档的区别&#xff0c;说明为什么 VSCode/Notion 都不合适&#xff09; 二、技术选型&#xff1a;为什么是单 Pyth…...

从手机解锁合法化看DMCA、消费者权利与设备所有权的博弈

1. 从“越狱”到合法化&#xff1a;一场关于设备所有权的消费者权利运动2013年初&#xff0c;如果你在美国买了一部合约机&#xff0c;然后想把它带到另一家运营商使用&#xff0c;你面临的不仅仅是不兼容的技术问题&#xff0c;还可能是一项重罪——最高五年的监禁和五十万美元…...

测试环境搭建指南:从零开始构建完善的测试体系

测试环境搭建指南&#xff1a;从零开始构建完善的测试体系 前言 各位前端小伙伴&#xff0c;不知道你们有没有这样的经历&#xff1a;在自己电脑上测试好好的&#xff0c;一到CI环境就各种失败。 我曾经因为测试环境和生产环境不一致&#xff0c;导致线上出现了一个严重bug。后…...

终极指南:如何在Mac上快速安装配置DistroAV网络视频插件 [特殊字符]

终极指南&#xff1a;如何在Mac上快速安装配置DistroAV网络视频插件 &#x1f680; 【免费下载链接】obs-ndi DistroAV (formerly OBS-NDI): NDI integration for OBS Studio 项目地址: https://gitcode.com/gh_mirrors/ob/obs-ndi 想要在多台电脑之间轻松传输高质量的音…...

LinkedIn Liger Kernel:移动设备内核定制与性能优化实战

1. 项目概述&#xff1a;一个面向移动设备的开源内核探索如果你在移动设备开发、嵌入式系统或者内核研究的圈子里待过一段时间&#xff0c;大概率听说过或者接触过“Liger Kernel”这个名字。它不是一个商业产品&#xff0c;而是一个在GitHub上由LinkedIn开源并维护的Android内…...