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"(不区分大小写),也就是说在排序和比较时,Aa 会被视为相同的字符。

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

3. utf8mb4_0900_ai_ci

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

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

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

总结区别:

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

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

  • 字符集支持 :如果需要支持更多的字符(如表情符号),推荐使用 utf8mb4
  • 大小写和重音符号敏感度:是否需要严格区分大小写或重音符号。
  • MySQL 版本 :如果是 MySQL 8.0 或更高版本,推荐使用 utf8mb4_0900_ai_ci,它在多语言支持和兼容性方面有优势。
相关推荐
极小狐21 小时前
干掉流水线里的长期密钥:用 OIDC 让 CI/CD 与云以临时凭证对接
microsoft·ci/cd·gitlab·devops·ci·cd·oidc
极小狐2 天前
CI 流水线提速实战:缓存设计与依赖代理的工程实践
缓存·ci/cd·gitlab·devops
11路没有终点2 天前
CI/CD 集成:GitHub Actions
ci/cd·github
harmony&2 天前
DevOps 实战:从概念到 CI/CD 持续交付全流程
运维·ci/cd·devops
DevOps老兵3 天前
AI Infra实战11:模型部署Pipeline——CI/CD自动化
人工智能·ci/cd·ai·自动化·gitlab
极小狐3 天前
从复制粘贴到可复用组件:极狐GitLab CI/CD 组件目录实战
java·ci/cd·gitlab·devops·组件化
陈皮糖..3 天前
基于 Kubernetes 与 GitLab CI/CD 的云原生自动化交付平台
运维·ci/cd·云原生·架构·kubernetes·自动化·gitlab
11路没有终点3 天前
CI/CD 面试 10 问
ci/cd
Sopaco4 天前
CI/CD 中的知识管理:Terrain 如何实现自动文档更新
ci/cd
11路没有终点4 天前
GitLab CI/CD 高级模式实战:include 模板库 / trigger 子流水线 / matrix 并行
ci/cd·gitlab