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,它在多语言支持和兼容性方面有优势。
相关推荐
IAR Systems4 天前
松下电工借助IAR CI/CD解决方案,实现品质与效率双重飞跃
ci/cd
Cherry的跨界思维4 天前
【AI测试全栈:质量】47、Vue+Prometheus+Grafana实战:打造全方位AI监控面板开发指南
vue.js·人工智能·ci/cd·grafana·prometheus·ai测试·ai全栈
古斯塔夫歼星炮5 天前
Dify + Jenkins 实现AI应用持续集成与自动化部署
ci/cd·jenkins·dify
codingWhat5 天前
手把手系列之——前端工程化
ci/cd·devops·前端工程化
测试渣5 天前
持续集成中的自动化测试框架优化实战指南
python·ci/cd·单元测试·自动化·pytest
我的xiaodoujiao6 天前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 51--CI/CD 4--推送本地代码到Git远程仓库
python·学习·测试工具·ci/cd·pytest
deephub7 天前
并行多智能体系统的协调测试实战:从轨迹捕获到CI/CD的六个步骤
人工智能·ci/cd·大语言模型·aiagent
你的论文学长7 天前
文本处理的 CI/CD:用 NLP 静态分析解决查重飘红与 Format Error
人工智能·ci/cd·自然语言处理·重构·论文·学习方法
Elastic 中国社区官方博客9 天前
Agentic CI/CD:使用 Kubernetes 部署门控,结合 Elastic MCP Server
大数据·人工智能·elasticsearch·搜索引擎·ci/cd·容器·kubernetes
莫比乌斯之梦10 天前
使用 Docker 运行 Jenkins:快速搭建高效 CI/CD 环境指南
ci/cd·docker·jenkins