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,它在多语言支持和兼容性方面有优势。
相关推荐
2501_915921431 天前
KXBuild CI 实操,Windows/Linux 服务器接入 Jenkins 打包 iOS IPA
服务器·windows·vscode·ios·ci/cd·个人开发·敏捷流程
蒸鱼Yuzheng3 天前
性能 CI 成本优化:设备分钟、风险分层与自适应测试选择
自动化测试·ci/cd·性能测试·测试平台·成本优化
7177774 天前
2026年CI/CD工具选哪家比较好:主流方案对比与Gitee选型解析
ci/cd·gitee
smartpi_ai5 天前
机芯智能离线语音模块实战问答:SU-03T、CI-03T、SU-63T 与 JX-A7T 高频问题排查
人工智能·单片机·嵌入式硬件·ci/cd·语音识别
Lvan的前端笔记5 天前
GitLab CI 环境变量整理
ci/cd·gitlab
梯度下降者7 天前
二、自动化运维架构师的三大核心能力
ci/cd·架构师·自动化运维·iac·平台工程
长不大的杨瑞杰7 天前
OpenCode v2 CI 与自动化实战:无交互运行、权限收口与制品闭环
运维·人工智能·ci/cd·自动化·软件工程·1024程序员节
Madison-No78 天前
Jenkins持续集成
运维·ci/cd·jenkins
kaixin_learn_qt_ing8 天前
CI/CD是什么
ci/cd
smartpi_ai9 天前
离线语音芯片怎么选:SU、CI、JX、JL 系列语音模块选型指南
人工智能·ci/cd·语音识别