当前位置: 首页 > article >正文

Mysql的utf8mb4_general_ci 与 utf8mb4_bin 的具体区别是什么?中文适合哪个?

1. utf8mb4_general_ci vs utf8mb4_bin 的具体区别

utf8mb4_general_ciutf8mb4_bin 都是 utf8mb4 编码的排序规则(collation),它们主要在 排序(ORDER BY)比较(WHERE) 时的行为不同:

排序规则是否区分大小写是否区分重音速度适用场景
utf8mb4_general_ci❌ 不区分❌ 不区分✅ 更快适用于一般文本,如用户名、标题
utf8mb4_bin✅ 区分✅ 区分⛔ 更慢适用于密码、唯一标识符
(1) utf8mb4_general_ci(Case-Insensitive,不区分大小写)
  • CI 代表 “Case Insensitive”,表示比较时 不区分大小写,也 不区分重音符号
  • 例如:
    SELECT 'a' = 'A';  -- 结果是 TRUE
    SELECT 'résumé' = 'resume'; -- 结果是 TRUE
    
    utf8mb4_general_ci 主要适用于 对大小写或重音符号不敏感的文本(如用户名、标签等)。
(2) utf8mb4_bin(Binary,区分大小写)
  • utf8mb4_bin 按照 二进制编码 逐字节进行比较,因此大小写、重音符号完全不同。
  • 例如:
    SELECT 'a' = 'A' COLLATE utf8mb4_bin; -- 结果是 FALSE
    SELECT 'résumé' = 'resume' COLLATE utf8mb4_bin; -- 结果是 FALSE
    
    utf8mb4_bin 适用于 严格区分大小写的场景(如密码、文件名、唯一标识符)。

2. 除了 utf8mb4_general_ciutf8mb4_bin,还有哪些?

utf8mb4 编码有多种排序规则,主要区别在于:

  • 是否区分大小写
  • 是否区分重音
  • 排序算法
(1) 常见的 utf8mb4 排序规则
排序规则是否区分大小写是否区分重音适用场景
utf8mb4_general_ci❌ 不区分❌ 不区分一般文本,如用户名、标题
utf8mb4_general_cs✅ 区分❌ 不区分需要区分大小写但不区分重音的场景
utf8mb4_unicode_ci❌ 不区分✅ 区分多语言支持,如 ée
utf8mb4_unicode_cs✅ 区分✅ 区分多语言场景,严格匹配
utf8mb4_bin✅ 区分✅ 区分密码、唯一标识符
(2) utf8mb4_general_ci vs utf8mb4_unicode_ci
特性utf8mb4_general_ciutf8mb4_unicode_ci
是否区分大小写❌ 不区分❌ 不区分
是否区分重音❌ 不区分✅ 区分
是否符合 Unicode 规则⛔ 不完全符合✅ 符合 Unicode 排序规则
速度✅ 快⛔ 稍慢
  • utf8mb4_general_ci 适用于性能优先的应用,它的比较方式比较简单,不完全符合 Unicode 规则。
  • utf8mb4_unicode_ci 适用于多语言支持,比如 德语的 ß 应该等于 ss,但 utf8mb4_general_ci 可能不会正确处理。

3. 选择排序规则的建议

  • 大小写不敏感、不关注重音: utf8mb4_general_ci(性能更快)
  • 大小写不敏感、但区分重音: utf8mb4_unicode_ci(多语言支持更好)
  • 大小写敏感、但不区分重音: utf8mb4_general_cs
  • 大小写敏感、也区分重音: utf8mb4_unicode_cs
  • 严格区分大小写、适用于 ID/密码等: utf8mb4_bin

5. 总结

  • utf8mb4_general_ci:不区分大小写、不区分重音,适用于一般文本。
  • utf8mb4_bin:严格区分大小写和重音,适用于唯一标识符(如密码、UUID)。
  • utf8mb4_unicode_ci:符合 Unicode 规则,适用于多语言支持。

适合用中文的是?

如果你的数据包含中文,建议使用 utf8mb4_unicode_ciutf8mb4_unicode_520_ci,因为它们能够更准确地进行排序和比较。下面是不同排序规则在处理中文时的特点:

1. utf8mb4_general_ci vs. utf8mb4_unicode_ci 处理中文的区别

排序规则是否区分大小写是否区分重音是否适合中文排序规则准确性
utf8mb4_general_ci❌ 不区分❌ 不区分⚠️ 基本支持,但排序不准确🚫 较差
utf8mb4_unicode_ci❌ 不区分✅ 区分更适合中文,符合 Unicode 规范准确
utf8mb4_unicode_520_ci❌ 不区分✅ 区分最新 Unicode 规则,适合中文更准确
utf8mb4_bin✅ 区分✅ 区分不适合中文排序(仅适用于精确匹配,如密码)🚫 排序无意义

2. 为什么 utf8mb4_general_ci 不适合中文?

utf8mb4_general_ci 主要是针对拉丁字符优化,它对汉字的处理方式较为简单,可能会导致 排序不符合中文习惯,例如:

SELECT '中' > '啊' COLLATE utf8mb4_general_ci;
  • utf8mb4_general_ci 可能会 按照字符编码顺序 排序,而不是按拼音或部首排序,这样会出现 “中” 排在 “啊” 之前,这并不符合常见的中文排序规则。

3. utf8mb4_unicode_ci 更适合中文

  • utf8mb4_unicode_ci 遵循 Unicode 标准,能够正确地比较和排序 汉字、拼音、部首,在处理中文时比 utf8mb4_general_ci 更准确
  • 例如:
    SELECT '中' > '啊' COLLATE utf8mb4_unicode_ci;
    
    utf8mb4_unicode_ci 规则下,“啊” 会排在 “中” 之前,符合拼音排序规则(AZ 之前)。

4. utf8mb4_unicode_520_ci 适用于最新 Unicode 标准

  • utf8mb4_unicode_520_ciUnicode 5.2 版本的排序规则,它在 utf8mb4_unicode_ci 的基础上 进一步优化了字符排序,对于现代 Unicode 处理更完善。
  • 例如:
    SELECT '𠜎' > '中' COLLATE utf8mb4_unicode_520_ci;
    
    utf8mb4_unicode_520_ci 下,可以正确处理扩展汉字,避免某些生僻字排序错误。

5. 选择适合中文的排序规则

适用场景推荐排序规则
普通中文文本(适用于大多数情况)utf8mb4_unicode_ci
最新 Unicode 规则(支持扩展汉字)utf8mb4_unicode_520_ci
大小写敏感,适用于特定情况utf8mb4_unicode_cs
严格区分大小写和重音(如密码存储)utf8mb4_bin

6. 结论

如果你存储中文,并且希望排序、比较符合 Unicode 规范,推荐

utf8mb4_unicode_ci

如果你希望使用最新 Unicode 5.2 标准,并支持更多生僻字,推荐

utf8mb4_unicode_520_ci

⚠️ 避免 utf8mb4_general_ci,因为它不适用于中文排序 🚫

utf8mb4_unicode_520_ci 是mysql5.7 有吗?

utf8mb4_unicode_520_ci 在 MySQL 5.7 支持的

1. utf8mb4_unicode_520_ci 在 MySQL 版本的支持情况

排序规则MySQL 5.5MySQL 5.6MySQL 5.7MySQL 8.0
utf8mb4_general_ci✅ 支持✅ 支持✅ 支持✅ 支持
utf8mb4_unicode_ci✅ 支持✅ 支持✅ 支持✅ 支持
utf8mb4_unicode_520_ci不支持不支持支持支持

MySQL 5.7 引入了 utf8mb4_unicode_520_ci,它基于 Unicode 5.2 标准,相比 utf8mb4_unicode_ci(基于 Unicode 4.0),提供了更准确的字符排序,尤其是对于 扩展汉字、emoji、某些特殊符号


2. 如何在 MySQL 5.7 检查 utf8mb4_unicode_520_ci 是否可用?

运行以下 SQL 语句:

SHOW COLLATION WHERE Collation LIKE 'utf8mb4_unicode_520_ci';

如果返回结果,说明 MySQL 5.7 支持该排序规则 ✅。

如果没有结果,可能是 MySQL 版本较低(如 5.6 或 5.5),可以运行:

SELECT VERSION();

检查 MySQL 版本。


3. 在 MySQL 5.7 中使用 utf8mb4_unicode_520_ci

创建表
CREATE TABLE test_table (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) COLLATE utf8mb4_unicode_520_ci
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
修改表的排序规则
ALTER TABLE test_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
修改数据库默认排序规则
ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;

4. utf8mb4_unicode_520_ci vs utf8mb4_unicode_ci

规则utf8mb4_unicode_ciutf8mb4_unicode_520_ci
Unicode 版本Unicode 4.0Unicode 5.2
生僻字 & emoji 处理可能不准确更准确
法语、德语等特殊字符排序不完整更符合规范
扩展汉字 & 拼音排序较好更好

5. 结论

MySQL 5.7 支持 utf8mb4_unicode_520_ci,适用于 更准确的中文排序
如果是 MySQL 5.6 或更早版本,utf8mb4_unicode_520_ci 不可用,可以用 utf8mb4_unicode_ci 代替

相关文章:

Mysql的utf8mb4_general_ci 与 utf8mb4_bin 的具体区别是什么?中文适合哪个?

1. utf8mb4_general_ci vs utf8mb4_bin 的具体区别 utf8mb4_general_ci 和 utf8mb4_bin 都是 utf8mb4 编码的排序规则(collation),它们主要在 排序(ORDER BY) 和 比较(WHERE) 时的行为不同&…...

茂捷M1001电感式编码器芯片TSSOP28管脚,国产电感式编码器IC

简述: M1001 电感式编码器芯片是一款专为高精度位置检测而设计的芯片产品,采用先进的电感技术,能够精确测量旋转物体的位置和角度。芯片具有 SIN/COS、模拟、PWM、SENT、SPI、I2C等多种角度输出功能,具有高分辨率、宽工作温度范围…...

LeetCode-跳跃游戏 II

方法一:反向查找出发位置 我们的目标是到达数组的最后一个位置,因此我们可以考虑最后一步跳跃前所在的位置,该位置通过跳跃能够到达最后一个位置。 如果有多个位置通过跳跃都能够到达最后一个位置,那么我们应该如何进行选择呢&a…...

【后端】【django】Django DRF `@action` 详解:自定义 ViewSet 方法

Django DRF action 详解:自定义 ViewSet 方法 在 Django REST Framework(DRF)中,action 装饰器用于为 ViewSet 添加自定义的 API 端点。相比于 update、create 等默认方法,action 允许我们定义 更加清晰、语义化 的 A…...

数据结构——双向链表dlist

前言:大家好😍,本文主要介绍了数据结构——双向链表dlist 一 双向链表定义 1. 双向链表的节点结构 二 双向链表操作 2.1 定义 2.2 初始化 2.3 插入 2.3.1 头插 2.3.2 尾插 2.3.3 按位置插 2.4 删除 2.4.1 头删 2.4.2 尾删 2.4.3 按…...

IDEA 一键完成:打包 + 推送 + 部署docker镜像

1、本方案要解决场景? 想直接通过本地 IDEA 将最新的代码部署到远程服务器上。 2、本方案适用于什么样的项目? 项目是一个 Spring Boot 的 Java 项目。项目用 maven 进行管理。项目的运行基于 docker 容器(即项目将被打成 docker image&am…...

图像分类数据集

《动手学深度学习》-3.5-学习笔记 # 通过ToTensor实例将图像数据从PIL类型变换成32位浮点数格式, # 并除以255使得所有像素的数值均在0~1之间 trans transforms.ToTensor()#用于将图像数据从 PIL 图像格式(Python Imaging Library&#xff…...

设计模式之美

UML建模 统一建模语言(UML)是用来设计软件的可视化建模语言。它的语言特点是简单 统一 图形化 能表达软件设计中的动态与静态信息。 UML的分类 动态结构图: 类图 对象图 组件图 部署图 动态行为图: 状态图 活动图 时序图 协作…...

2025-03-15 学习记录--C/C++-PTA 练习3-4 统计字符

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、题目描述 ⭐️ 练习3-4 统计字符 本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、…...

802.11标准

系列文章目录 文章目录 系列文章目录一、相关知识二、使用步骤1.802.11修正比较2.802.11ac 三、杂记 一、相关知识 跳频扩频:射频信号可分为窄带信号和扩频信号。如果射频信号的带宽大于承载数据所需的带宽,该信号就属于扩频信号。跳频扩频(FHSS)是一种…...

母婴商城系统Springboot设计与实现

项目概述 《母婴商城系统Springboot》是一款基于Springboot框架开发的母婴类电商平台,旨在为母婴产品提供高效、便捷的在线购物体验。该系统功能全面,涵盖用户管理、商品分类、商品信息、商品资讯等核心模块,适合母婴电商企业或个人开发者快…...

C#通过API接口返回流式响应内容---分块编码方式

1、背景 上一篇文章《C#通过API接口返回流式响应内容—SSE方式》阐述了通过SSE(Server Send Event)方式,由服务器端推送数据到浏览器。本篇是通过分块编码的方式实现 2、效果 3、具体代码 3.1 API端实现 [HttpGet] public async Task Chu…...

游戏引擎学习第158天

回顾和今天的计划 我们在这里会实时编码一个完整的游戏,没有使用引擎或库,一切都由我们自己做所有的编程工作,游戏中的每一部分,无论需要做什么,我们都亲自实现,并展示如何完成这些任务。今天,…...

如何在电脑上使用 Jupyter Notebook 通过 SSH 远程连接树莓派Zero

有无数种方式通过SSH远程连接树莓派,但对于树莓派Zero 2W这种硬件资源有限的板子,因为内存有限Pycharm干脆不能通过SSH连接树莓派Zero 2W。VScode通过SSH连接时,也会因为资源有限时常断线。因此,我们就要用轻量级的编辑器Jupyter …...

[新能源]新能源汽车快充与慢充说明

接口示意图 慢充接口为交流充电口(七孔),快充接口为直流充电口(九孔)。 引脚说明 上图给的是充电口的引脚图,充电枪的为镜像的。 慢充接口引脚说明 快充接口引脚说明 充电流程 慢充示意图 慢充&…...

《解锁华为黑科技:MindSpore+鸿蒙深度集成奥秘》

在数字化浪潮汹涌澎湃的当下,人工智能与操作系统的融合已成为推动科技发展的核心驱动力。华为作为科技领域的先锋,其AI开发框架MindSpore与鸿蒙系统的深度集成备受瞩目,开启了智能生态的新篇章。 华为MindSpore:AI框架的创新先锋…...

HCIA-ACL

一、基本概念 1、概念:ACL即访问控制列表,是一种基于包过滤的访问控制技术。由一条或多条规则组成的集合,通过定义动作来确保哪些数据包可以通过,哪些需要被阻止。 2、基本原理:ACL 通过规则对数据包分类,…...

深入解析 React 最新特性:革新、应用与最佳实践

深入解析 React 最新特性:革新、应用与最佳实践 1. 引言 React 作为前端开发的核心技术之一,近年来不断推出 新的 API 和优化机制,从 Concurrent Rendering(并发模式) 到 Server Components(服务器组件&a…...

通信协议传输过程中的序列化和反序列化机制

在通信协议的传输过程中,序列化和反序列化是核心机制之一。它们影响数据的传输效率、兼容性和解析速度,特别是在分布式系统、RPC(远程过程调用)、消息队列和微服务架构中至关重要。 1. 什么是序列化和反序列化? 序列化…...

在IDEA中连接达梦数据库:详细配置指南

达梦数据库(DM Database)作为国产关系型数据库的代表,广泛应用于企业级系统开发。本文将详细介绍如何在IntelliJ IDEA中配置并连接达梦数据库,助力开发者高效完成数据库开发工作。 准备工作 1. 下载达梦JDBC驱动 访问达梦官方资…...

OkHttp 的证书设置

在 Android 开发中,通过 OkHttp 自定义 SSLSocketFactory 和 X509TrustManager 可以有效增强 HTTPS 通信的安全性,防止中间人攻击(如抓包工具 Charles/Fiddler 的拦截)。以下是实现防抓包的关键技术方案: 一、Okhttp设…...

机器视觉工程师如何学习C#通讯

建议大家可以提前测试,真实模拟现场的情况,或者采用虚拟串口,虚拟网口频繁测试通讯的稳定性,以后有现场需要,可以快速布局到现场。 机器视觉工程师学习C#通讯协议需要结合工业场景需求,掌握基础协议原理、常…...

数字电子技术会被淘汰吗?模拟电子技术的未来发展与应用

引言 当今世界正处在数字电子技术飞速发展的时代。自上世纪中叶以来,集成电路中的晶体管数量按照摩尔定律呈指数级增长,计算设备性能大幅提升。一个典型例子是,我们口袋中的智能手机拥有的运算能力远超早期计算机:iPhone 14的处理…...

基于yolov8+streamlit实现目标检测系统带漂亮登录界面

【项目介绍】 基于YOLOv8和Streamlit实现的目标检测系统,结合了YOLOv8先进的目标检测能力与Streamlit快速构建交互式Web应用的优势,为用户提供了一个功能强大且操作简便的目标检测平台。该系统不仅具备高精度的目标检测功能,还拥有一个漂亮且…...

软件性能测试与功能测试联系和区别

随着软件开发技术的迅猛发展,软件性能测试和功能测试成为了确保软件质量的两个重要环节。那么只有一字之差的性能测试和功能测试分别是什么?又有哪些联系和区别呢? 一、软件性能测试是什么?   软件性能测试是为了评估软件系统在特定条件下的表现,包…...

交易系统【三】网关

第二章本来是要讲消息总线,审核说是过度宣传,就放弃了,不纠结,先跳过。 网关和消息总线的底层技术都和网络相关,两者也有很重要的差别。消息总线主要用于内网,受交换机和网卡影响比较大,网络状…...

Axure设计之堆叠柱状图教程(中继器)

堆叠柱状图是一种常用的数据可视化工具,它通过在同一柱状图内堆叠不同类别的数据,以展示每个类别在总体中的贡献或占比。堆叠柱状图不仅可以帮助我们观察数据的总量,还能清晰地揭示各部分之间的关系和变化趋势。以下是一个使用Axure制作动态效…...

antd的Form表单校验的方式有几种

Ant Design 的 Form 组件提供了多种灵活的表单校验方式&#xff0c;以下是常见的几种方法及示例&#xff1a; 1. 内置校验规则 通过 rules 配置预定义的校验规则&#xff08;如必填、长度、格式等&#xff09;。 <Form.Itemname"email"label"邮箱"rul…...

前端面试:React hooks 调用是可以写在 if 语句里面吗?

在 React 中&#xff0c;Hooks 是一种新的特性&#xff0c;允许你在函数组件中使用状态&#xff08;state&#xff09;和其他 React 特性。非常重要的一点是&#xff0c;React Hooks 必须遵循特定的规则&#xff0c;以确保组件的行为一致。 React Hooks 使用规则 只能在函数组…...

本地部署Hive集群

规划 服务机器Hive本体部署在Node1元数据服务所需的关系型数据库(MYSQL)部署在Node1 安装MYSQL数据库 # 更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022# 安装Mysql yum库 rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.…...