我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL字符集和排序规则详解(推荐)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL字符集和排序规则详解(推荐)

前言

mysql中,字符集和排序规则在处理文本数据时起着至关重要的作用,本文将详细介绍 MySQL中的字符集和排序规则。

简介

字符集(Character Set):

  • 字符集定义了数据库中可以存储的字符的集合。在MySQL中,常见的字符集包括utf8、utf8mb4、latin1等。
  • utf8mb4字符集是用于在MySQL中存储Unicode字符集(包括Emoji等特殊字符)的一种字符集,提供更广泛的字符支持。

排序规则(Collation):

  • 排序规则定义了如何对字符进行比较和排序。不同的排序规则会影响字符比较的结果。
  • 排序规则由字符集和排序方式组成,例如utf8_general_ci、utf8mb4_unicode_ci等。

字符集

常见字符集 以及 说明

  • utf8:

UTF-8 是一种变长字符编码,可以表示世界上几乎所有的字符。utf8是MySQL中常用的字符集,但在处理某些特殊字符(如 Emoji)时可能会有问题。

  • utf8mb4:

utf8mb4 是 utf8 的超集,支持存储更广泛的字符范围(包括 Emoji 等)。通常用于支持更广泛的语言和符号。

  • latin1:

Latin1 是一种较老的字符集,适用于大多数西欧语言和部分其他语言的字符。

  • latin2:

Latin2 是扩展的 Latin1 字符集,支持中东欧语言中的额外字符。

  • cp1251:

CP1251 是常用于俄语的字符集。

  • utf16:

UTF-16 是一种固定长度字符编码,用于表示 Unicode 字符。每个字符占两个字节。

  • utf32:

UTF-32 是一种固定长度字符编码,用于表示 Unicode 字符。每个字符占四个字节。

  • binary:

Binary 字符集以二进制方式存储数据,并且对存储的数据进行大小写敏感的比较。

  • ascii:

ASCII 字符集只支持 ASCII 字符集中的字符,范围较窄。

大多数选择 utf8mb4 字符集 同时也支持表情存储

排序规则

常见的排序规则

以字符集 utf8mb4 为例

  • utf8mb4_bin:这是一个大小写敏感的二进制排序规则,直接根据字符的二进制值进行比较,区分大小写。
  • utf8mb4_croatian_ci:克罗地亚语的大小写不敏感排序规则,适用于克罗地亚语文本的比较和排序。
  • utf8mb4_czech_ci:捷克语的大小写不敏感排序规则,适用于捷克语文本的比较和排序。
  • utf8mb4_danish_ci:丹麦语的大小写不敏感排序规则,适用于丹麦语文本的比较和排序。
  • utf8mb4_esperanto_ci:世界语的大小写不敏感排序规则,适用于世界语文本的比较和排序。
  • utf8mb4_estonian_ci:爱沙尼亚语的大小写不敏感排序规则,适用于爱沙尼亚语文本的比较和排序。
  • utf8mb4_general_ci:这是一个通用的大小写不敏感排序规则,适用于大多数情况下的文本比较和排序。
  • utf8mb4_german2_ci:德语的大小写不敏感排序规则,适用于德语文本的比较和排序。
  • utf8mb4_hungarian_ci:匈牙利语的大小写不敏感排序规则,适用于匈牙利语文本的比较和排序。
  • utf8mb4_icelandic_ci:冰岛语的大小写不敏感排序规则,适用于冰岛语文本的比较和排序。
  • utf8mb4_latvian_ci:拉脱维亚语的大小写不敏感排序规则,适用于拉脱维亚语文本的比较和排序。
  • utf8mb4_lithuanian_ci:立陶宛语的大小写不敏感排序规则,适用于立陶宛语文本的比较和排序。
  • utf8mb4_persian_ci:波斯语的大小写不敏感排序规则,适用于波斯语文本的比较和排序。
  • utf8mb4_polish_ci:波兰语的大小写不敏感排序规则,适用于波兰语文本的比较和排序。
  • utf8mb4_roman_ci:罗马尼亚语的大小写不敏感排序规则,适用于罗马尼亚语文本的比较和排序。
  • utf8mb4_romanian_ci:罗马尼亚语的大小写不敏感排序规则,适用于罗马尼亚语文本的比较和排序。
  • utf8mb4_sinhala_ci:僧伽罗语的大小写不敏感排序规则,适用于僧伽罗语文本的比较和排序。
  • utf8mb4_slovak_ci:斯洛伐克语的大小写不敏感排序规则,适用于斯洛伐克语文本的比较和排序。
  • utf8mb4_slovenian_ci:斯洛文尼亚语的大小写不敏感排序规则,适用于斯洛文尼亚语文本的比较和排序。
  • utf8mb4_spanish2_ci:西班牙语的大小写不敏感排序规则,适用于西班牙语文本的比较和排序。
  • utf8mb4_spanish_ci:西班牙语的大小写不敏感排序规则,适用于西班牙语文本的比较和排序。
  • utf8mb4_swedish_ci:瑞典语的大小写不敏感排序规则,适用于瑞典语文本的比较和排序。
  • utf8mb4_turkish_ci:土耳其语的大小写不敏感排序规则,适用于土耳其语文本的比较和排序。
  • utf8mb4_unicode_520_ci:Unicode 5.20版本的大小写不敏感排序规则,适用于支持 Unicode 5.20字符集的文本比较和排序。
  • utf8mb4_unicode_ci:Unicode的大小写不敏感排序规则,适用于支持Unicode字符集的文本比较和排序。
  • utf8mb4_vietnamese_ci:越南语的大小写不敏感排序规则,适用于越南语文本的比较和排序。

比较常用的应该就是以下4个

  • utf8mb4_general_ci: 不区分大小写,一般用于一般文本比较,适合非敏感数据。
  • utf8mb4_unicode_ci: 不区分大小写,支持多语言,适合需要多语言支持的应用。
  • utf8mb4_bin: 区分大小写,按照二进制顺序比较,适合敏感数据比较。

选择排序规则的考虑因素:

  • 大小写敏感性:

_ci(Case Insensitive):不区分大小写。
_cs(Case Sensitive):区分大小写。 选择对大小写敏感的排序规则,如utf8mb4_bin。

  • 多语言支持:

_unicode_ci:提供对多语言的支持,适用于需要处理不同语言字符的场景。

  • 排序方式:

_ci(Case Insensitive):按照不区分大小写的方式进行排序。
_bin(Binary):按照二进制方式进行排序,严格按照字符的编码值进行比较。

  • 性能考虑:

不同排序规则对性能有影响,一些排序规则可能比其他规则更快。
选择合适的排序规则有助于优化查询性能。

实践

我们来测试下 区分大小写和不区分大小写的排序规则 查询有何不同

新建表

新建bs表 同时 name 排序规则设置为utf8mb4_general_ci 大小写不敏感

CREATE TABLE `bs` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4

测试数据写入

INSERT INTO `test`.`bs` (`id`,`name`) VALUES ('1','a');
INSERT INTO `test`.`bs` (`id`,`name`) VALUES ('2','A');
INSERT INTO `test`.`bs` (`id`,`name`) VALUES ('3','aA');
INSERT INTO `test`.`bs` (`id`,`name`) VALUES ('4','Aa');
INSERT INTO `test`.`bs` (`id`,`name`) VALUES ('5','AA');
INSERT INTO `test`.`bs` (`id`,`name`) VALUES ('6','aa');

排序规则 不区分大小写 数据测试

select * from bs where name= 'A';

MySQL字符集和排序规则详解(推荐)

select * from bs where name= 'a';

MySQL字符集和排序规则详解(推荐)

select * from bs where name= 'aa';

MySQL字符集和排序规则详解(推荐)

select * from bs where name= 'AA';

MySQL字符集和排序规则详解(推荐)

select * from bs where name= 'aA';

MySQL字符集和排序规则详解(推荐)

select * from bs where name= 'Aa';

MySQL字符集和排序规则详解(推荐)

select * from bs where name LIKE '%A';

MySQL字符集和排序规则详解(推荐)

select * from bs where name LIKE '%a';

MySQL字符集和排序规则详解(推荐)

select * from bs where name= '%A%';

MySQL字符集和排序规则详解(推荐)

select * from bs where name= '%a%';

MySQL字符集和排序规则详解(推荐)

排序规则 区分大小写 数据测试

修改表name 字段为 排序规则为 utf8mb4_bin

ALTER TABLE `bs`
	MODIFY COLUMN `name` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE  utf8mb4_bin NOT NULL  ;
select * from bs where name= 'A';

MySQL字符集和排序规则详解(推荐)

select * from bs where name= 'a';

MySQL字符集和排序规则详解(推荐)

select * from bs where name= 'aa';

MySQL字符集和排序规则详解(推荐)

select * from bs where name= 'AA';

MySQL字符集和排序规则详解(推荐)

select * from bs where name= 'aA';

MySQL字符集和排序规则详解(推荐)

select * from bs where name= 'Aa';

MySQL字符集和排序规则详解(推荐)

select * from bs where name LIKE '%A';

MySQL字符集和排序规则详解(推荐)

select * from bs where name LIKE '%a';

MySQL字符集和排序规则详解(推荐)

select * from bs where name LIKE '%A%';

MySQL字符集和排序规则详解(推荐)

select * from bs where name LIKE '%a%';

MySQL字符集和排序规则详解(推荐)

总结

可以看到在排序规则区分大小写和不区分大小写 对SQL查询的结果 影响还是比较大的。

所以在选择字符集时,需要考虑使用的语言、特殊字符的需求以及数据存储的具体情况。确保所选字符集能够覆盖项目中的所有字符需求,并选择合适的排序规则以确保数据的正确比较和排序。

到此这篇关于MySQL字符集和排序规则详解的文章就介绍到这了,更多相关MySQL字符集和排序规则内容请搜索编程网(www.lsjlt.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.lsjlt.com)!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL字符集和排序规则详解(推荐)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL字符集和排序规则详解(推荐)

目录前言简介字符集(Character Set):排序规则(Collation):字符集排序规则常见的排序规则选择排序规则的考虑因素:实践新建表测试数据写入排序规则 不区分大小写 数据测试排序规则 区分大小写 数据测试总结前言mysql中
MySQL字符集和排序规则详解(推荐)
2024-08-29

mysql字符集和排序规则是什么

MySQL字符集和排序规则是用于定义数据库中字符串数据存储和比较的规则。字符集(Character Set)指的是一组字符的集合,包括了字母、数字、标点符号、空格等字符。MySQL支持多种字符集,常见的字符集有UTF-8、GBK、Latin
2023-08-25

mysql怎么查看字符集和排序规则

在MySQL中,可以使用以下命令来查看字符集和排序规则:查看当前数据库的字符集和排序规则:SHOW VARIABLES LIKE 'collation%';查看MySQL服务器的字符集和排序规则:SHOW VARIABL
mysql怎么查看字符集和排序规则
2024-04-09

MySQL原理 - 字符集与排序规则

任何计算机存储数据,都需要字符集,因为计算机存储的数据其实都是二进制编码,将一个个字符,映射到对应的二进制编码的这个映射就是字符编码(字符集)。这些字符如何排序呢?决定字符排序的规则就是排序规则。查看内置字符集与比较规则通过show charset;命令,可以
MySQL原理 - 字符集与排序规则
2021-04-11

Mysql建库字符集和排序规则及说明

目录概述排序规则字符集的选择排序规则1. utf8mb4_bin2. utf8mb4_unicode_ci 和 utf8mb4_general_ci总结概述我们在使用mysql的时候,尤其是在创建数据库的时候,我们需要选择当前数据库的字符
2022-12-09

MySQL字符集排序的规则是什么

MySQL字符集排序规则是根据字符的二进制值来进行排序的。不同的字符集具有不同的排序规则,比如在Latin1字符集中,按照ASCII码的顺序来排序;在UTF-8字符集中,按照Unicode码的顺序来排序。MySQL提供了多种不同的字符集,可
MySQL字符集排序的规则是什么
2024-04-09

详解mysql中的字符集和校验规则

1几种常见字符集 在MySQL中,最常见的字符集有ASCII字符集、latin字符集、GB2312字符集、GBK字符集、UTF8字符集等,下面我们简单介绍下这些字符集: ASCII字符集 这个字符集使用1个字节进行编码,一
2022-05-21

MySQL建立数据库时字符集和排序规则的选择

文章目录 前言一、字符集?二、Mysql中的字符集1.Unicode与UTF8、UTF8MB4、UTF16、UTF32关系2.Mysql新建数据库时选择哪种字符集呢? 三、Mysql排序规则四、Mysql查询字符集和排序规则常
2023-08-20

一文带你了解MySQL字符集和比较规则

目录1. mysql中的utf8和utf8mb42. MySQL中的比较规则3. 各级别的字符集和比较规则3.1 服务器级别3.2 数据库级别3.3 表级别3.4 列级别4. 修改字符集或比较规则5. MySQL中的字符集转换过程总结 1.
2022-12-29

MySQL 字符集和校验规则工作原理

字符编码相关参数数据流中的转码过程校验规则Tips:字符集和校验规则总是相伴的一 从简单的建库语句开始CREATE DATABASE [IF NOT EXISTS] [[DEFAULT] CHARACTER SET ] [[DEFAULT] COLLATE ]
MySQL 字符集和校验规则工作原理
2016-08-01

各编程语言中字符常量的表示方法和规则详解

如何在不同编程语言中表示字符常量?导语:在编程过程中,字符常量是不可变的值,用来表示单个字符。不同的编程语言有不同的方式来表示字符常量。本文将介绍几种常见的编程语言中表示字符常量的方式,并给出具体的代码示例。一、C语言表示字符常量:在C语言
各编程语言中字符常量的表示方法和规则详解
2023-12-27

编程热搜

目录