utf8mb4_bin、 utf8mb3_general_ci 、utf8mb4_0900_ai_ci 这几个有什么区别

我看项目上 用户信息部分字段用了utf8mb4_bin

这几个都是 MySQL 中的字符集和排序规则(Collation)选项,主要区别体现在字符编码、排序规则和对字符的处理方式上。

1. utf8mb4_bin

  • 字符集 :utf8mb4 表示使用 4 字节的 UTF-8 编码,可以支持所有 Unicode 字符,包括一些特殊字符(如表情符号)。

  • 排序规则 :bin 表示"二进制排序",即按照字符的字节值进行排序。字符的比较是逐字节的,不考虑字符的语言或大小写规则。

    • 特点:大小写敏感,且完全基于字符的字节值比较,不做任何归类处理。

2. utf8mb3_general_ci

  • 字符集 :utf8mb3 是旧版的 UTF-8 编码,仅支持最多 3 字节来表示字符。它能表示的字符集较少,无法处理所有 Unicode 字符(比如某些表情符号就不能表示)。

  • 排序规则 :general_ci 表示"通用不区分大小写"的排序规则。这里的 ci 表示"Case Insensitive"(不区分大小写),也就是说在排序和比较时,A 和 a 会被视为相同的字符。

    • 特点:不区分大小写,且一些字符(比如重音符号)可能被认为是相同的字符。适合用于不要求严格排序的场景。

3. utf8mb4_0900_ai_ci

  • 字符集 :utf8mb4,与 utf8mb4_bin 一样,支持所有 Unicode 字符。

  • 排序规则 :0900 表示 MySQL 8.0 引入的排序规则,ai 表示"Accent Insensitive"(不区分重音符号),ci 表示"不区分大小写"。

    • 特点 :这种排序规则在比较时,不区分大小写,也不区分重音符号。比如 é 和 e 会被视为相同的字符,a 和 A 也会被视为相同的字符。适合多语言应用,不要求严格的字符顺序比较。

总结区别:

  • utf8mb4_bin:大小写敏感,比较严格,基于字节值。
  • utf8mb3_general_ci:不区分大小写,适合常见的应用,但有字符集限制(最多支持 3 字节)。
  • utf8mb4_0900_ai_ci:不区分大小写,也不区分重音符号,是 MySQL 8.0 及以后的默认排序规则,适合多语言支持,兼容性更好。

在实际选择时,通常会根据以下几个因素来决定:

  • 字符集支持 :如果需要支持更多的字符(如表情符号),推荐使用 utf8mb4。
  • 大小写和重音符号敏感度:是否需要严格区分大小写或重音符号。
  • MySQL 版本 :如果是 MySQL 8.0 或更高版本,推荐使用 utf8mb4_0900_ai_ci,它在多语言支持和兼容性方面有优势。
相关推荐
洋就在江州1 天前
gitlab-cicd 离线集成——springboot-cicd (非docker形式,shell形式)
java·spring boot·后端·ci/cd·gitlab·gitlab-runner
oicola1 天前
【运维】CI/CD是什么,合格的规范应该怎么设置
运维·ci/cd
tianyuanwo1 天前
【软考高级系统架构设计师】05 - DevOps & CI/CD专题备考
ci/cd·系统架构·devops
白帽攻防录4 天前
SRC 挖洞:Claude Code Action 供应链 RCE 深度复盘,CVE-2026-47751 一个 PR 怎么偷走你所有 CI/CD 密钥
网络安全·ci/cd·供应链安全
hasty5 天前
安全扫描器也要被隔离:Trivy Terraform 文件读取漏洞与 CI 输出边界
安全·ci/cd·terraform
事圆则缓6 天前
Android 使用 Jenkins 实现 CI/CD,并用 SonarQube 建立质量门禁
android·ci/cd·jenkins
行者-全栈开发9 天前
【码动四季·秋】从 commit 到发版全自动:Conventional Commits + semantic-release 发布流水线实战
git·ci/cd·自动化发布·atomgit·semantic-releas·语义化版本自动化·git 提交规范落地
Zhou14113610 天前
CICD_01_持续集成与Jenkins入门
运维·ci/cd·jenkins
大貔貅喝啤酒10 天前
Gitea+Jenkins+Docker 搭建 Node 项目 CI/CD 自动部署完整教程
ci/cd·docker·jenkins·js·gitea