【MySQL】字符集与排序规则

news2024/9/24 19:15:41

在MySQL数据库中,字符集(Character Set)和排序规则(Collation,也称字符集校验规则)是重要的概念,它们对于正确存储和比较数据至关重要。

字符集与排序规则

字符集是一组字符的集合,与数字编码之间建立了对应关系。它定义了数据库中可以存储的字符种类和范围。常见的字符集有UTF-8、Latin1、GBK等。字符集决定了数据库可以处理的语言和字符的能力。

排序规则定义了字符在排序和比较操作中的顺序。它决定了字符串排序的方式,包括字母的大小写敏感性、特殊字符的处理等。排序规则也叫字符集校对规则

每个字符集可以有多个排序规则。即排序规则是和字符集结合使用的,二者配合规定了数据库对字符串的存储范围、排序方式、大小写美感性、特殊字符的处理等。

MySQL支持的字符集

MySQL 提供了 SQL 用于查看数据库支持的字符集。
MySQL 环境如下图所示:
在这里插入图片描述
执行 show charset; 查看该数据库支持的字符集。

mysql> show charset;
+----------+---------------------------------+---------------------+--------+
| Charset  | Description                     | Default collation   | Maxlen |
+----------+---------------------------------+---------------------+--------+
| armscii8 | ARMSCII-8 Armenian              | armscii8_general_ci |      1 |
| ascii    | US ASCII                        | ascii_general_ci    |      1 |
| big5     | Big5 Traditional Chinese        | big5_chinese_ci     |      2 |
| binary   | Binary pseudo charset           | binary              |      1 |
| cp1250   | Windows Central European        | cp1250_general_ci   |      1 |
| cp1251   | Windows Cyrillic                | cp1251_general_ci   |      1 |
| cp1256   | Windows Arabic                  | cp1256_general_ci   |      1 |
| cp1257   | Windows Baltic                  | cp1257_general_ci   |      1 |
| cp850    | DOS West European               | cp850_general_ci    |      1 |
| cp852    | DOS Central European            | cp852_general_ci    |      1 |
| cp866    | DOS Russian                     | cp866_general_ci    |      1 |
| cp932    | SJIS for Windows Japanese       | cp932_japanese_ci   |      2 |
| dec8     | DEC West European               | dec8_swedish_ci     |      1 |
| eucjpms  | UJIS for Windows Japanese       | eucjpms_japanese_ci |      3 |
| euckr    | EUC-KR Korean                   | euckr_korean_ci     |      2 |
| gb18030  | China National Standard GB18030 | gb18030_chinese_ci  |      4 |
| gb2312   | GB2312 Simplified Chinese       | gb2312_chinese_ci   |      2 |
| gbk      | GBK Simplified Chinese          | gbk_chinese_ci      |      2 |
| geostd8  | GEOSTD8 Georgian                | geostd8_general_ci  |      1 |
| greek    | ISO 8859-7 Greek                | greek_general_ci    |      1 |
| hebrew   | ISO 8859-8 Hebrew               | hebrew_general_ci   |      1 |
| hp8      | HP West European                | hp8_english_ci      |      1 |
| keybcs2  | DOS Kamenicky Czech-Slovak      | keybcs2_general_ci  |      1 |
| koi8r    | KOI8-R Relcom Russian           | koi8r_general_ci    |      1 |
| koi8u    | KOI8-U Ukrainian                | koi8u_general_ci    |      1 |
| latin1   | cp1252 West European            | latin1_swedish_ci   |      1 |
| latin2   | ISO 8859-2 Central European     | latin2_general_ci   |      1 |
| latin5   | ISO 8859-9 Turkish              | latin5_turkish_ci   |      1 |
| latin7   | ISO 8859-13 Baltic              | latin7_general_ci   |      1 |
| macce    | Mac Central European            | macce_general_ci    |      1 |
| macroman | Mac West European               | macroman_general_ci |      1 |
| sjis     | Shift-JIS Japanese              | sjis_japanese_ci    |      2 |
| swe7     | 7bit Swedish                    | swe7_swedish_ci     |      1 |
| tis620   | TIS620 Thai                     | tis620_thai_ci      |      1 |
| ucs2     | UCS-2 Unicode                   | ucs2_general_ci     |      2 |
| ujis     | EUC-JP Japanese                 | ujis_japanese_ci    |      3 |
| utf16    | UTF-16 Unicode                  | utf16_general_ci    |      4 |
| utf16le  | UTF-16LE Unicode                | utf16le_general_ci  |      4 |
| utf32    | UTF-32 Unicode                  | utf32_general_ci    |      4 |
| utf8mb3  | UTF-8 Unicode                   | utf8_general_ci     |      3 |
| utf8mb4  | UTF-8 Unicode                   | utf8mb4_0900_ai_ci  |      4 |
+----------+---------------------------------+---------------------+--------+
41 rows in set (0.04 sec)

mysql> 

其中
Charset 指字符集名称;
Description 指字符集描述;
Default collation 指该字符集默认排序规则;
Maxlen 指该字符集存储字符的单位大小,一般情况下,该值越大,其可存储的字符范围越大

使用 SQL 语句也能查到以上字符集结果,语句如下:

select * from information_schema.character_sets order by character_set_name ;

编码集特性示例

编码集特性
ascii共收录128个字符,包括空格、标点符号、数字、大小写字母和一些不可见字符。由于总共才128个字符,所以可以使用1个字节来进行编码
latin1共收录256个字符,是在ASCII字符集的基础上又扩充了128个西欧常用字符(包括德法两国的字母),也可以使用1个字节来进行编码。
gb2312收录了汉字以及拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母。其中收录汉字6763个,其他文字符号682个,兼容ASCII字符集。这是一个变长字符集,如果该字符在ascii字符集中,则采用1字节编码,否则采用两字节。
gbkGBK是在gb2312基础上扩容后的标准。收录了所有的中文字符。同样的,这是一个变长字符集,如果该字符在ascii字符集中,则采用1字节编码,否则采用两字节。
utf8和utf8mb4收录地球上能想到的所有字符,而且还在不断扩充。这种字符集兼容ASCII字符集,采用变长编码方式,编码一个字符需要使用1~4个字节。MySQL为了节省空间,其中的utf8是标准 UTF8 阉割后的,只有1~3字节编码的字符集,基本包含了所有常用的字符。如果还要使用 enoji 表情,那么需要使用utf8mb4,这个是完整的 UTF8 字符集。
utf16不同于utf8,utf16用两个字节或者四个字节编码字符,可以理解为utf8的不节省空间的一种形式
utf32固定用四个字节编码字符,可以理解为utf8的不节省空间的一种形式

支持的排序规则

使用命令 show collation; 可以查看数据库支持的所有排序规则,由于太多,以下以查看 gb2312 字符集所属的排序规则。

mysql> show collation where Charset='gb2312';
+-------------------+---------+----+---------+----------+---------+---------------+
| Collation         | Charset | Id | Default | Compiled | Sortlen | Pad_attribute |
+-------------------+---------+----+---------+----------+---------+---------------+
| gb2312_bin        | gb2312  | 86 |         | Yes      |       1 | PAD SPACE     |
| gb2312_chinese_ci | gb2312  | 24 | Yes     | Yes      |       1 | PAD SPACE     |
+-------------------+---------+----+---------+----------+---------+---------------+

其中各字段含义如下

  • Collation :排序规则名
  • Charset :所属字符集
  • Id : 每个字符集校对规则的唯一标识符
  • Default : 是否是默认排序规则,YES 表示是所属字符集的默认排序规则
  • Compiled :如果某个字符集校对规则已编译,则该列的值为 Yes,否则为 No。
  • Sortlen :用于排序的最大字符数。
  • Pad_attribute :指示是否在比较字符串时使用填充。

使用如下SQL语句也能查到如上信息,

mysql> select * from information_schema.collations where character_set_name = "gb2312" order by collation_name;
+-------------------+--------------------+----+------------+-------------+---------+---------------+
| COLLATION_NAME    | CHARACTER_SET_NAME | ID | IS_DEFAULT | IS_COMPILED | SORTLEN | PAD_ATTRIBUTE |
+-------------------+--------------------+----+------------+-------------+---------+---------------+
| gb2312_bin        | gb2312             | 86 |            | Yes         |       1 | PAD SPACE     |
| gb2312_chinese_ci | gb2312             | 24 | Yes        | Yes         |       1 | PAD SPACE     |
+-------------------+--------------------+----+------------+-------------+---------+---------------+
2 rows in set (0.00 sec)

mysql> 

排序规则命名特点

排序规则(字符集校验规则)名称命名有一定的规律。

  • 排序规则名称以与其关联的字符集的名称开头,可以用通过这个开头查询所有的字符集,也可以查询 information_schema.collations 精确指定字符集
  • 字符集后面跟着的是语言编码,因为utf8mb4包含了所有字符,不同国家的文字语言排序肯定不一样。
  • 最后末尾的ci代表case insensitive,大小写不敏感,所有可能的后缀如下所示:
符号含义
aiaccent insensitive 不区分重音
asaccent sensitive 区分重音
cicase insensitive 不区分大小写
cscase sensitive 区分大小写
binbinary 以二进制方式比较

例如,在字符序“utf8_general_ci”下,字符“a”和“A”是等价的;在字符序“utf8_general_cs”下,字符“a”和“A”是不等价的;在字符序“utf8_bin”下,直接比较字符编码,可以区分大小写,因为字符集的“A”和“a”的编码显然不同。

总结

尽管MySQL 支持众多字符集与排序规则,在使用 MySQL 时,确保数据库、表和列的字符集设置一致,以避免潜在的字符转换问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1364778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

window使用cpolar实现内网穿透

文章目录 cpolar下载和安装启动和配置cpolar卸载 cpolar下载和安装 进入spolar官网,完成注册,下载相应的cploar版本解压和运行安装文件 配置安装路径,然后选择next,完成即可 启动和配置 点击首页的快捷图标打开网页&#xf…

C++11_可变参数模版

文章目录 前言一、可变参数模版是什么?二、如何使用可变参数模版1.怎么解析可变参数模版2.可变参数模版的实际应用 总结 前言 C11 ,添加了许多有用的功能,上章我们主要讲解了右值引用,这章我们来讲解可变参数模版的使用。 提示&a…

Redis:原理速成+项目实战——Redis实战7(优惠券秒杀+细节解决超卖、一人一单问题)

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:Redis:原理速成项目实战——Redis实战6(封装缓存工具(高级写法)&&缓存总…

实验室管理系统建设方案(LIMS)

1.实验室管理系统 1.1.系统概述 需求描述 实验室管理系统通过先进的数据处理技术对实验室进行全面管理,促进实验室检测流程的信息化、规范化,同时强化实验室检测数据的组织、分析、查询和输出,并对实验过程中的质量因素进行严格控制。 1.1…

分布式锁3: zk实现分布式锁3 使用临时顺序节点+watch监听实现阻塞锁

一 zk实现分布式锁 1.1 使用临时顺序节点 的问题 接上一篇文章,每个请求要想正常的执行完成,最终都是要创建节点,如果能够避免争抢必然可以提高性能。这里借助于zk的临时序列化节点,实现分布式锁 1. 主要修改了构造方法和lock方…

SpringBoot2基础

SpringBoot2 一、初始化项目 ①、创建project ②、构建maven项目 如果选项里没有8的,可以最顶上镜像换成阿里巴巴的:https://start.aliyun.com/ 直接在main函数运行就行 二、SpringBoot入门 1、复制工程 原则 保留工程基础结构抹掉原始工程痕迹 做个…

Java SE入门及基础(4)

Java 中的数据类型 1.数据的概念 数据就是信息的符号表示。 比如: 小米手机 红米 10 元 5 年 刘德华 帅 50 188 富豪 2.数据类型 生活中我们常见的数据类型: Java中的数据类型分为 基本数据类型 和 引用数据类型 两大类 Java 中…

Java学习苦旅(二十四)——Java中的内部类

本篇博客将讲解Java中的内部类。 文章目录 内部类本地内部类实例内部类静态内部类匿名内部类 结尾 内部类 本地内部类 本地内部类是定义在方法当中的类。例如: public class Test {public void fun() {class Test {public int a;}} }本地内部类只能在当前方法中…

大数据毕业设计:新闻情感分析系统 舆情分析 NLP 机器学习 爬虫 朴素贝叶斯算法(附源码+论文)✅

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏) 毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总 🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题&#xff…

基于SSM的游戏资源管理系统+vue论文

摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古…

Linux第11步_解决“挂载后的U盘出现中文乱码”

学习完“通过终端挂载和卸载U盘”,我们发现U盘下的中文文件名会出现乱码,现在讲解怎么解决这个问题。其实就是复习一下“通过终端挂载和卸载U盘”,单独讲解,是为了解决问题,一次性搞好,我们会不长记性。 在…

Mac M1 Parallels Debian10 Install Gitlab

安装Debian10 Debian10百度网盘下载链接: https://pan.baidu.com/s/1ovBWIhTpljIVOxEkjJQjkQ?pwd6666 提取码: 6666 –来自百度网盘超级会员v7的分享 # 1.install # 2.localtion: 中国 → 语言: 中文(简体) # 3.网络 默认、自动配置 # 4.主机名域名(随意…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第二天-Linux开发板外设练习题(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机…

总420+,专业120+南京大学851信号与系统电子信息考研经验通信,电子信息

今年考研数学130,专业课120,总分420顺利被南京大学电通录取,梦圆南大,这一年的复习有过迷茫,有过犹豫,最后都坚持过来了,总结一下自己的复习经验,希望对大家有所帮助。数学 5-8月数…

消除字母Scratch-第14届蓝桥杯Scratch省赛真题第6题

6. 消除字母(100分) 编程实现:消除字母。 具体要求: 1). 点击绿旗,角色、背景如图所示(创建1个字母表,并存入26个字母); 2). 等待1秒,阿拉蕾说&#xff1…

深入C++继承:面向对象编程的核心概念

C是一种功能强大的编程语言,支持面向对象编程(OOP)范式。在面向对象编程中,继承是一种重要的概念,它使得我们能够创建具有层次结构的类,并实现代码的重用和扩展。本文将深入探讨C中的继承机制,介…

在drawio中使用BPMN2.0绘制详细的业务流程图和编排模型

在drawio中使用BPMN2.0绘制详细的业务流程图和编排模型 drawio是一款强大的图表绘制软件,支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用,则直接输入网址draw.io或者使用drawon(桌案), drawon.cn内部完整的集成了drawio的所有功…

freertos——任务通知知识总结与任务通知模拟及信号量实验、消息邮箱实验、事件标志组实验

1.任务通知概念 任务通知:用来通知任务的,任务控制块中的结构体成员变量 ulNotifiedValue就是这个通知值,不需要另外创建一个结构体可以直接接受别人发过来的通知 2.任务通知的优势及劣势 任务通知的优势: 效率更高 &#xff…

基于Python+Django,开发一款房屋租赁系统

学习文档 学习过程中,遇到问题可以咨询作者 功能介绍 平台采用B/S结构,后端采用主流的PythonDjango进行开发,前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能包括:首页、房屋详情页、用户中心模块。…

卫星互联网与MEC融合方案研究

卫星互联网与MEC融合方案研究 作者:温特、王立中、司鹏、颜明明、马恬、郭伊蒙 中国卫通集团股份有限公司 本文首发:第十九届卫星通信学术年会 摘 要:在卫星互联网中引入移动边缘计算(MEC)技术可有效提高用户体验质量,降低运营成…