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,它在多语言支持和兼容性方面有优势。
相关推荐
为什么要内卷,摆烂不香吗1 小时前
Dockerfile 与 Docker Compose 在 CI/CD 管道中的分工与配合方式
ci/cd·docker·容器
松☆2 小时前
自动化构建 OpenHarmony Flutter 应用:从本地脚本到 CI/CD 流水线实战
flutter·ci/cd·自动化
一只大头猿1 天前
myeclipse-ci-2018安装教程
ide·ci/cd·myeclipse
胡萝卜的兔1 天前
ci/cd自动化部署
运维·ci/cd·自动化
一念一花一世界1 天前
Arbess V2.1.9版本发布,支持Arm64位系统的安装部署,支持自定义消息模版,支持钉钉消息通知
ci/cd·钉钉·arm·arbess
一念一花一世界1 天前
Arbess零基础学习 - 发布流水线提交评审,通过钉钉通知评审人
ci/cd·钉钉·arbess
一念一花一世界2 天前
DevOps实战(12) - 使用Arbess+GitLab实现Java项目构建并将制品上传Aliyun OSS
阿里云·ci/cd·gitlab·devops·arbess
张人大 Renda Zhang2 天前
Maven = Java 构建世界的“事实标准”:从 pom.xml 到云原生 CI/CD
xml·java·spring boot·后端·ci/cd·云原生·maven
晚霞的不甘2 天前
构建生产级应用:Flutter + OpenHarmony 的工程化实践与 CI/CD 体系搭建
flutter·ci/cd
行走的陀螺仪3 天前
GitLab CI/CD 完整教学指南
前端·ci/cd·gitlab·团队开发·自动化测试部署