【MySQL】字符集与排序规则

在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 时,确保数据库、表和列的字符集设置一致,以避免潜在的字符转换问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

prometheus与zabbix监控的对比介绍

一、普米与zabbix基本介绍 1、prometheus介绍 Prometheus的基本原理是Prometheus Server通过HTTP周期性抓取被监控组件的监控数据,任意组件只要提供对应的HTTP接口并且符合Prometheus定义的数据格式,就可以接入Prometheus监控。 工作流程大致分为收集数…

java SSM水质历史数据可视化设计myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM水质历史数据可视化设计是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主…

2023-我的CSDN创作之旅

1.博客内容与数量 2023年共发表博客59篇,内容主要集中在GIS,空间分析等领域 主要内容有: networkx学习 Geospatial Data Science Geocomputation ESDA in PySal SHAP Spatial Data Analysis BikeDNA 以下是对这几个章节主要内容的简…

Docker无法启动Postgresql容器

目录 问题描述解决问题 问题描述 拉取了一个Postgresql14.2的镜像,在docker run创建并运行容器之后使用docker ps发现容器没有跑起来,再次使用docker start也没跑起来。 docker run -d --name mypg -v psql-data:/var/lib/postgresql/data -e POSTGRES…

【Bug】Android BottomNavigationView 图标黑色色块问题

最近在研究Android Jetpack组件,在使用Navigation配合底部导航栏时,发现一个奇怪的问题,如下: 说明:图标来源于Iconfont开源图标库 我的第三个图标变成了一个黑色色块,这个问题前两天我遇见过&#xff0c…

web服务器nginx和Apache有什么区别?

随着互联网的快速发展,Web服务器在互联网应用中扮演着越来越重要的角色。其中,Nginx和Apache是两种广泛使用的Web服务器软件。尽管它们都可以实现Web服务器的功能,但Nginx和Apache在许多方面存在一些重要的区别。本文将探讨Nginx和Apache之间…

学习Vue 03-03 为TypeScript使用defineComponent支持

03 为TypeScript使用defineComponent支持 The defineComponent() method is a wrapper function that accepts an object of configurations and returns the same thing with type inference for defining a component. defineComponent() 方法是一个封装函数,它…

win2003搭建DNS服务器域名解析方法

可以搭建DNS服务器的系统有很多,这里以win2003举例。 要在Windows 2003上搭建DNS服务器,需要按照以下步骤操作: 一 配置DNS服务器 1、打开“控制面板”,选择“添加/删除程序”,点击“添加/删除Windows组件”。 2、在“Windows组件向导”中…

【技能---500G硬盘-Ubuntu 20.04安装分区参考】

文章目录 Ubuntu 20.04安装分区指导安装分区流程Ubuntu 系统分区关键一步----- 选择安装启动引导器的设备 Ubuntu 20.04安装分区指导 安装Ubuntu 20.04的时候可以自己指定各个内存空间的占用,值得注意的是,这里的分区有一定的技巧!&#xff0…

深度学习 Day24——J3-1DenseNet算法实战与解析

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制🚀 文章来源:K同学的学习圈子 文章目录 前言1 我的环境2 pytorch实现DenseNet算法2.1 前期准备2.1.1 引入库2.1.2 设…

Spring MVC RequestMappingInfo路由条件匹配

前言 我们已经知道,被RequestMapping标注的方法会被解析为 HandlerMethod,它也是 Spring MVC 中最常用的 Handler 类型。现在的问题是,HTTP 请求是如何路由到对应的 HandlerMethod?你可能脱口而出:根据请求的 Url 匹配…

知识图谱 vs GPT

简介: 当我们谈论知识图谱时,我们指的是一种结构化的知识表示形式,是一种描述真实世界中事物及其关系的语义模型,用于描述实体之间的关系。它通过将知识组织成图形结构,提供了一种更全面、准确和智能的信息处理方式。知…

【论文阅读笔记】Mip-NeRF 360: Unbounded Anti-Aliased Neural Radiance Fields

目录 概述摘要引言参数化效率歧义性 mip-NeRF场景和光线参数化从粗到细的在线蒸馏基于区间的模型的正则化实现细节实验限制总结:附录退火膨胀采样背景颜色 paper:https://arxiv.org/abs/2111.12077 code:https://github.com/google-research/…

分布式系统架构设计之分布式事务的概述和面临的挑战

在当今大规模应用和服务的背景下,分布式系统的广泛应用已经成为了一种必然的主流趋势。然后,伴随着分布式系统的应用范围的增长,分布式事务处理成为了一个至关重要的关键话题。在传统的单体系统中,事务处理通常相对简单&#xff0…

opencv006 绘制直线、矩形、⚪、椭圆

绘制图形是opencv经常使用的操作之一,库中提供了很多有用的接口,今天来学习一下吧! (里面的函数和参数还是有点繁琐的) 最终结果显示 函数介绍 直线 line(img, pt1, pt2, color, thickness, lineType, shift) img: 在…

django websocket

目录 核心代码 consumers.py from channels.generic.websocket import WebsocketConsumer from channels.exceptions import StopConsumer import datetime import time from asgiref.sync import async_to_sync class ChatConsumer(WebsocketConsumer):def websocket_conne…

【STM32】STM32学习笔记-编码器接口测速(20)

00. 目录 文章目录 00. 目录01. 预留02. 编码器测速接线图03. 编码器测速程序示例04. 程序下载05. 附录 01. 预留 02. 编码器测速接线图 03. 编码器测速程序示例 Encoder.h #ifndef __ENCODER_H #define __ENCODER_Hvoid Encoder_Init(void); int16_t Encoder_Get(void);#en…

someip中通过event方式通信,为什么实际使用时使用的是eventGroup?

someip是一种面向服务的可伸缩的协议,用于控制消息的汽车中间件的解决方案。someip提供了三种接口类型:Method,Event和Field,分别对应不同的通信机制和场景。 Event是一种主动发送的接口,用于通知客户端服务端的状态变化或者事件发生。Event可以按照一定的规则或者周期发…

IDEA中自动导包及快捷键

导包设置及快捷键 设置:Setting->Editor->General->Auto import快捷键 设置:Setting->Editor->General->Auto import java区域有两个关键选项 Add unambiguous imports on the fly 快速添加明确的导包 IDEA将在我们书写代码的时候…

JS中模块的导入导出

背景 学习js过程中,发现导入导出有的是使用的export 导出,import导入,有的是使用exports或module.exports导出,使用require导入,不清楚使用场景和规则,比较混乱。 经过了解发现,NodeJS 中&…