面试官:MySQL中COLLATE是用来做什么的?

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 面试官:MySQL中COLLATE是用来做什么的?

文章目录



前言


MySQL中凡是涉及到字符类型比较或排序的地方,都会和COLLATE有关


⛳️ 1.COLLATE介绍


COLLATE即使校验规则, 会影响到 ORDER BY 语句的顺序,

会影响到 WHERE 条件中大于小于号筛选出来的结果,

会影响DISTINCT、GROUP BY、HAVING语句的查询结果。

另外,mysql 建索引的时候,如果索引列是字符类型,

也会影响索引创建,只不过这种影响我们感知不到。

总之,凡是涉及到字符类型比较或排序的地方,都会和 COLLATE 有关


image.png

在mysql中执行show create table 指令,可以看到一张表的建表语句

image.png

image.png

所谓所谓utf8_unicode_ci,其实是用来排序的规则。

对于mysql中那些字符类型的列,

如VARCHAR,CHAR,TEXT类型的列,

都需要有一个COLLATE类型来告知mysql如何对该列进行排序和比较。


⛳️ 2.COLLATE的区别


COLLATE 通常是和数据编码(CHARSET )相关的 ,

一般来说每种 CHARSET 都有多种它所支持的 COLLATE,

并且每种 CHARSET 都指定一种 COLLATE 为默认值。

latin1 编码的默认 COLLATE 为 latin1_swedish_ci

GBK 编码的默认 COLLATE 为 gbk_chinese_ci

utf8mb4 编码的默认值为 utf8mb4_general_ci

另外需要注意的一点是,

从 mysql 8.0 开始,

mysql 默认的 CHARSET 已经不再是 Latin1 了,

改为了 utf8mb4,并且默认的 COLLATE 也改为了 utf8mb4_0900_ai_ci


mysql> show charset where charset in (‘gbk’,‘utf8mb4’,‘latin1’);

image.png

⛳️ 3.COLLATE的影响


🌈 3.1 大小写影响


create table case_bin_test (word VARCHAR(10));
INSERT INTO case_bin_test VALUES (‘Frank’),(‘Google’),(‘froogle’),(‘flickr’),(‘FlicKr’);

image.png

mysql查询默认是不区分大小写的,如下所示

image.png

如果想区分大小写,则要加binary,如下所示

image.png

image.png

🌈 3.2 排序影响

MySQL默认的order by是不区分大小写的
##建表
create table test_collate
(id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
text varchar(40) NOT NULL
)
##插入数据
insert into test_collate(text) values(‘aaa’),(‘bbb’),(‘AAA’),(‘BBB’);

现在,如果我们按照text排序:

mysql> select * from test_collate order by text;

image.png

结果表明,大写的AAA和小写的aaa被认为是一样的, 都排在BBB和bbb前面


现在,如果我们按照text排序,使用utf8mb4_bin:

现在,如果我们按照text排序,使用utf8mb4_bin:
select * from test_collate order by text collate utf8mb4_bin;

image.png

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5天前
|
存储 关系型数据库 MySQL
【Java面试题汇总】MySQL数据库篇(2023版)
聚簇索引和非聚簇索引、索引的底层数据结构、B树和B+树、MySQL为什么不用红黑树而用B+树、数据库引擎有哪些、InnoDB的MVCC、乐观锁和悲观锁、ACID、事务隔离级别、MySQL主从同步、MySQL调优
【Java面试题汇总】MySQL数据库篇(2023版)
|
1月前
|
SQL 存储 关系型数据库
复盘女朋友面试4个月的Mysql面试题(1万字)
该文章详细分析了Ribbon的超时配置是否会覆盖OpenFeign的超时配置,并探讨了OpenFeign超时配置能否动态实时修改生效的问题。
复盘女朋友面试4个月的Mysql面试题(1万字)
|
1月前
|
关系型数据库 MySQL Java
面试官:说说MySQL调优?
面试官:说说MySQL调优?
61 5
面试官:说说MySQL调优?
|
1月前
|
SQL 关系型数据库 MySQL
面试准备-MySQL
面试准备-MySQL
|
1月前
|
缓存 NoSQL Redis
一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)
这篇文章是关于Java面试中可能会遇到的五个问题,包括MySQL索引类型及其对数据库性能的影响、Redis的RDB和AOF持久化机制、Redis的过期键删除策略、Redis的单线程模型为何高效,以及缓存雪崩、缓存穿透和缓存击穿的概念及其解决方案。
|
1月前
|
算法 关系型数据库 MySQL
一天五道Java面试题----第七天(mysql索引结构,各自的优劣--------->事务的基本特性和隔离级别)
这篇文章是关于MySQL的面试题总结,包括索引结构的优劣、索引设计原则、MySQL锁的类型、执行计划的解读以及事务的基本特性和隔离级别。
|
1月前
|
SQL 存储 关系型数据库
|
29天前
|
存储 关系型数据库 MySQL
MySQL 常见面试题总结(上)
主要介绍 MYSQL 数据库面试中常见的面试问题。
17 0
|
2月前
|
算法 搜索推荐 NoSQL
面试题MySQL问题之分库分表后的富查询问题处理如何解决
面试题MySQL问题之分库分表后的富查询问题处理如何解决
40 3
|
2月前
|
运维 关系型数据库 MySQL
面试题MySQL问题之MySQL集群的单点失效如何解决
面试题MySQL问题之MySQL集群的单点失效如何解决
89 2