第3章 【MySQL】字符集和比较规则

news2025/1/11 8:12:21

3.1 字符集和比较规则简介

3.1.1 字符集简介

如何存储字符串?需要建立字符与二进制数据的映射关系。建立这个关系需要:

1.把哪些字符映射成二进制数据?

2.怎么映射?

将一个字符映射成一个二进制数据的过程也叫做 编码 ,将一个二进制数据映射到一个字符的过程叫做 解码 。

人们抽象出一个 字符集 的概念来描述某个字符范围的编码规则。比方说我们来自定义一个名称为 xiaohaizi 的字符集,它包含的字符范围和编码规则如下:

包含字符 'a' 、 'b' 、 'A' 、 'B' 。

编码规则如下:

采用1个字节编码一个字符的形式,字符和字节的映射关系如下:

'a' -> 00000001 (十六进制:0x01)

'b' -> 00000010 (十六进制:0x02)

'A' -> 00000011 (十六进制:0x03)

'B' -> 00000100 (十六进制:0x04)

有了 xiaohaizi 字符集,我们就可以用二进制形式表示一些字符串了,下边是一些字符串用 xiaohaizi 字符集编码后的二进制表示:

'bA' -> 0000001000000011 (十六进制:0x0203)

'baB' -> 000000100000000100000100 (十六进制:0x020104)

'cd' -> 无法表示,字符集xiaohaizi不包含字符'c'和'd'

3.1.2 比较规则简介

比较规则如下:

1.将两个大小写不同的字符全都转为大写或者小写

2.再比较这两个字符对应的二进制数据。

同一种字符集可以有多种比较规则。

3.1.3 一些重要的字符集

ASCII 字符集

共收录128个字符,包括空格、标点符号、数字、大小写字母和一些不可见字符。由于总共才128个字符,所以可以使用1个字节来进行编码,我们看一些字符的编码方式:

'L' -> 01001100(十六进制:0x4C,十进制:76)

'M' -> 01001101(十六进制:0x4D,十进制:77)

ISO 8859-1 字符集

共收录256个字符,是在 ASCII 字符集的基础上又扩充了128个西欧常用字符(包括德法两国的字母),也可以使用1个字节来进行编码。这个字符集也有一个别名 latin1 。

GB2312 字符集

收录了汉字以及拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母。其中收录汉字6763个,其他文字符号682个。同时这种字符集又兼容 ASCII 字符集,所以在编码方式上显得有些奇怪:

如果该字符在 ASCII 字符集中,则采用1字节编码。

否则采用2字节编码。

GBK 字符集

GBK 字符集只是在收录字符范围上对 GB2312 字符集作了扩充,编码方式上兼容 GB2312 。

utf8 字符集

收录地球上能想到的所有字符,而且还在不断扩充。这种字符集兼容 ASCII 字符集,采用变长编码方式,编码一个字符需要使用1~4个字节。

3.2 MySQL中支持的字符集和排序规则

3.2.1 MySQL中的utf8和utf8mb4

在 MySQL 中 utf8 是 utf8mb3 的别名,所以之后在 MySQL 中提到 utf8 就意味着使用1~3个字节来表示一个字符,如果大家有使用4字节编码一个字符的情况,比如存储一些emoji表情啥的,那请使用 utf8mb4 。

3.2.2 字符集的查看

MySQL 支持好多种字符集,查看当前 MySQL 中支持的字符集可以用下边这个语句:

SHOW (CHARACTER SET|CHARSET) [LIKE 匹配的模式];

其中 CHARACTER SET 和 CHARSET 是同义词,用任意一个都可以。我们查询一下(支持的字符集太多了,我们省略了一些):

            

可以看到,我使用的这个 MySQL 版本一共支持 41 种字符集,其中的 Default collation 列表示这种字符集中一种默认的 比较规则 。大家注意返回结果中的最后一列 Maxlen ,它代表该种字符集表示一个字符最多需要几个字节。

字符集名称

Maxien

ascii

1

latinl

1

gb2312

2

gbk

2

utf8

3

utf8mb4

4

3.2.3 比较规则的查看

查看 MySQL 中支持的比较规则的命令如下:

SHOW COLLATION [LIKE 匹配的模式];

先查看一下 utf8 字符集下的比较规则:

         

这些比较规则的命名还挺有规律的,具体规律如下:

比较规则名称以与其关联的字符集的名称开头。如上图的查询结果的比较规则名称都是以 utf8 开头的。

后边紧跟着该比较规则主要作用于哪种语言,比如 utf8_polish_ci 表示以波兰语的规则比较,utf8_spanish_ci 是以西班牙语的规则比较, utf8_general_ci 是一种通用的比较规则。

名称后缀意味着该比较规则是否区分语言中的重音、大小写啥的,具体可以用的值如下:

|后缀|英文释义|描述| |:--:|:--:|:--:| | _ai | accent insensitive |不区分重音| | _as | accent sensitive |区分重音| | _ci | case insensitive |不区分大小写| | _cs | case sensitive |区分大小写| | _bin | binary |以二进制方式比较|

比如 utf8_general_ci 这个比较规则是以 ci 结尾的,说明不区分大小写。

每种字符集对应若干种比较规则,每种字符集都有一种默认的比较规则, SHOW COLLATION 的返回结果中的Default 列的值为 YES 的就是该字符集的默认比较规则,比方说 utf8 字符集默认的比较规则就是utf8_general_ci 。

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

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

相关文章

【CI/CD】Rancher CD过程--20230906

gitlab设定CICD的变量 HARBOR_PASSWORD:密码HARBOR_USER:工号K8S_TOKEN:Bearer rancher key K8S_WORKLOAD_URL:选择【View in API】的URL,并非workload的URL。 准备json.txt 选择workload,进入【View i…

用户案例 | 蜀海供应链基于 Apache DolphinScheduler 的数据表血缘探索与跨大版本升级经验

导读 蜀海供应链是集销售、研发、采购、生产、品保、仓储、运输、信息、金融为一体的餐饮供应链服务企业。2021年初,蜀海信息技术中心大数据技术研发团队开始测试用DolphinScheduler作为数据中台和各业务产品项目的任务调度系统工具。本文主要分享了蜀海供应链在海…

Linux——(第五章)用户管理

目录 一、概述 二、基本操作 1.添加用户 2.指定/修改密码 3.删除用户 4.查询用户信息 5.切换用户 6.查看创建了那些用户 7.查看登录用户信息 8.设置普通用户具有root权限 9.用户组 10.修改组 11.用户和组的相关文件 一、概述 Linux系统是一个多用户多任务的操作系…

Ubuntu下QT操作Mysql数据库

本篇总结一下一下Ubuntu下QT操作Mysql数据库。 目录 1. 启动Mysql数据库服务器 2.查看QT支持的数据库驱动 3.连接数据库 4. 增加表和记录 5. 删除记录 6. 修改记录 7. 查询记录 8.完整代码和运行效果 常见错误总结: (1) 数据库服务没启动报错信息 (2) 有…

Java实现WebSocket客户端和服务端(简单版)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

自动驾驶(apollo)

💓博主csdn个人主页:小小unicorn 🚚代码仓库:小小unicorn的代码仓库🚚 🌹🌹🌹关注我带你学习编程知识 自动驾驶技术 引言自动驾驶的基本原理自动驾驶的技术挑战自动驾驶的潜在影响结…

[BSidesCF 2019]Futurella 1

外星语? 看到这个,我第一时间就是想复制百度一下看是不是什么新编码 结果… 你会发现你粘贴的时候出现的是英文,里面还带着flag 破案 查看源代码 发现根本就没有什么外星语,可能就是style.css在作祟 完整复制内容 Resistanc…

蓝牙协议栈BLE

前言 这阵子用到蓝牙比较多,想写一个专栏专门讲解蓝牙协议及其应用,本篇是第一篇文章,讲解低功耗蓝牙和蓝牙协议栈。 参考网上各大神文章,及瑞萨的文章,参考GPT,并且加入了一些本人的理解。 图片部分源自…

国内的几款强大的智能—AI语言模型

1、Tomchat :Tomchat https://www.tomchat.uk 支持gp4 支持 midjourny绘画 AI绘画功能:点我 介绍 1、4聊天 2、AI绘画 3、头像制作 1、国内百度研发的,文心一言: https://yiyan.baidu.com/welcome 大家如果像我的界面一样有【…

基于SSM的校园驿站管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

Nebula数据库安装

1、什么是nebula NebulaGraph是一款开源的、分布式的、易扩展的原生图数据库,能够承载包含数千亿个点和数万亿条边的超大规模数据集,并且提供毫秒级查询。 2、利用docker-compose安装Nebula数据库 1、前提条件 主机中安装了docker主机中安装了Docke…

opencv旋转图像

0 、使用旋转矩阵旋转 import cv2img cv2.imread(img.jpg, 1) (h, w) img.shape[:2] # 获取图像的宽和高# 定义旋转中心坐标 center (w / 2, h / 2)# 定义旋转角度 angle 90# 定义缩放比例 scale 1# 获得旋转矩阵 M cv2.getRotationMatrix2D(center, angle, scale)# 进行…

STM32使用FAT文件系统-常见概念、代码走读

fat文件系统的所有外部接口都在ff.h中 格式化 挂载 使用文件系统的第一步,就是挂载。 函数原型:FRESULT f_mount (FATFS* fs, const TCHAR* path, BYTE opt); /* Mount/Unmount a logical drive */ static FATFS fs; FRESULT fres f_mo…

Lenovo联想拯救者笔记本Legion Y7000P IRH8 2023款(82YA)原装出厂Win11系统镜像

自带硬件设备的所有驱动、出厂主题壁纸、Office办公软件、联想电脑管家等预装程序 所需要工具:16G或以上的U盘 文件格式:ISO 文件大小:12.5GB 链接:https://pan.baidu.com/s/1a2lpGlwiJvCF7e0feN2QbA?pwdn4n6 提取码&a…

ELK集群搭建流程(实践可用)

一、概述 ELK 是一个由三个开源软件工具组成的数据处理和可视化平台,包括 Elasticsearch、Logstash 和 Kibana。这些工具都是由 Elastic 公司创建和维护的。 Elasticsearch 是一个分布式的搜索和分析引擎,可以将大量数据存储在一个或多个节点上&#xf…

日常开发小点汇总(2)之防止网络不佳,获取不到css,页面logo做法

防止网络不佳&#xff0c;获取不到css&#xff0c;页面logo做法 <div><a href"//www.baidu.com" class"logo">百度</a></div>.logo {display: inline-block;width: 256px;height: 0;background: url(./logobai.png);background-r…

AndroidStudio最下方显示不出来Terminal等插件

File->Settings->Plugins 然后在上面的输入框中输入Terminal&#xff0c;并将最右侧的对勾打上即可。 安装即可

【快应用】二级页面如何携带参数返回一级页面?

【关键词】 快应用、router、onBackPress 【问题背景】 页面栈有A、B两个页面&#xff0c;怎么在B页面中调A页面的方法或传参&#xff1f;场景是&#xff1a;A页面是列表页&#xff0c;B页面是详情页&#xff0c;B页面状态改变后返回A页面状态也要改变。 【解决方法】 在onB…

ABB 3BHB003688R0101接口模块

通信接口&#xff1a;3BHB003688R0101 接口模块通常具有各种通信接口&#xff0c;例如以太网、串口、CAN总线等&#xff0c;以便与其他设备和系统进行数据交换和通信。 数据传输&#xff1a;它通常用于将数据、信号或控制命令从一个设备传输到另一个设备&#xff0c;以实现设备…

电商系统架构设计系列(十一):在电商的交易类系统中,如何正确地使用 Redis 这样的缓存系统呢?需要考虑哪些问题?

上篇文章中&#xff0c;我给你留了一个思考题&#xff1a;在电商的交易类系统中&#xff0c;如何正确地使用 Redis 这样的缓存系统呢&#xff1f;需要考虑哪些问题&#xff1f; 这篇文章&#xff0c;我们来聊聊。 引言 我们知道&#xff0c;大部分面向公众用户的互联网系统&a…