广告
返回顶部
首页 > 资讯 > 数据库 >mysql字符集相关总结
  • 950
分享到

mysql字符集相关总结

MySQL字符集 2022-05-22 22:05:58 950人浏览 安东尼
摘要

这边笔记主要记录一下对Mysql字符集相关知识的学习 字符集 一般我们使用如下语句创建一张表,创建表的时候指定了charset为utf8编码。 CREATE TABLE `test` ( `c1` int U

这边笔记主要记录一下对Mysql字符集相关知识的学习

字符集

一般我们使用如下语句创建一张表,创建表的时候指定了charset为utf8编码。


CREATE TABLE `test` (
 `c1` int UNSIGNED NOT NULL AUTO_INCREMENT,
 `c2` varchar(255),
 `c3` char(11),
 `c4` varchar(255),
 PRIMARY KEY (`c1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

但其实mysql也支持除了utf8之外的其他字符集,可以使用命令 show charset 查看当前mysql支持的所有字符集。

例如下图就是我的mysql支持的所有字符集。

可以从上图中看到,第四列表示该字符集最大长度。我们建表时常用的 utf8 在mysql里面实际最大长度是 3 个字符。一般认知中utf8是用1~4个字符来表示具体的内容的,但mysql里面的 utf8 实际是 utf8mb3 的别名,正宗的的最大用4个字符表示的在mysql中是 utf8mb4 。

注意:


utf8mb4
utf8mb4

比较规则

在上面那张图中,第三列 Default collation 就是这些字符集默认的比较规则。例如acsii字符集的默认比较规则是 ascii_general_ci ,utf8字符集的默认比较规则是 utf8_general_ci 。

其实每个字符集有很多种比较规则,例如我们看一下acsii字符集有哪些比较规则,如下图所示


mysql> show collation like 'ascii%';
+------------------+---------+----+---------+----------+---------+
| Collation  | Charset | Id | Default | Compiled | Sortlen |
+------------------+---------+----+---------+----------+---------+
| ascii_general_ci | ascii | 11 | Yes  |   |  0 |
| ascii_bin  | ascii | 65 |   |   |  0 |
+------------------+---------+----+---------+----------+---------+

ascii_general_ci 表示是一种通用的比较,其中 _ci 表示是不区分大小写(case insensitive)。(反之 _cs 就表示大小写敏感)

ascii_bin 表示是二进制比较

再看一下utf8、utf8mb4字符集有哪些比较规则,如下图所示


mysql> show collation like 'utf8%';
+--------------------------+---------+-----+---------+----------+---------+
| Collation    | Charset | Id | Default | Compiled | Sortlen |
+--------------------------+---------+-----+---------+----------+---------+
| utf8_general_ci   | utf8 | 33 | Yes  | Yes  |  1 |
| utf8_bin     | utf8 | 83 |   | Yes  |  1 |
| utf8_unicode_ci   | utf8 | 192 |   | Yes  |  8 |
| utf8_icelandic_ci  | utf8 | 193 |   | Yes  |  8 |
| utf8_latvian_ci   | utf8 | 194 |   | Yes  |  8 |
| utf8_romanian_ci   | utf8 | 195 |   | Yes  |  8 |
| utf8_slovenian_ci  | utf8 | 196 |   | Yes  |  8 |
| utf8_polish_ci   | utf8 | 197 |   | Yes  |  8 |
| utf8_estonian_ci   | utf8 | 198 |   | Yes  |  8 |
| utf8_spanish_ci   | utf8 | 199 |   | Yes  |  8 |
| utf8_swedish_ci   | utf8 | 200 |   | Yes  |  8 |
| utf8_turkish_ci   | utf8 | 201 |   | Yes  |  8 |
| utf8_czech_ci   | utf8 | 202 |   | Yes  |  8 |
| utf8_danish_ci   | utf8 | 203 |   | Yes  |  8 |
| utf8_lithuanian_ci  | utf8 | 204 |   | Yes  |  8 |
| utf8_slovak_ci   | utf8 | 205 |   | Yes  |  8 |
| utf8_spanish2_ci   | utf8 | 206 |   | Yes  |  8 |
| utf8_roman_ci   | utf8 | 207 |   | Yes  |  8 |
| utf8_persian_ci   | utf8 | 208 |   | Yes  |  8 |
| utf8_esperanto_ci  | utf8 | 209 |   | Yes  |  8 |
| utf8_hungarian_ci  | utf8 | 210 |   | Yes  |  8 |
| utf8_sinhala_ci   | utf8 | 211 |   | Yes  |  8 |
| utf8_german2_ci   | utf8 | 212 |   | Yes  |  8 |
| utf8_croatian_ci   | utf8 | 213 |   | Yes  |  8 |
| utf8_unicode_520_ci  | utf8 | 214 |   | Yes  |  8 |
| utf8_vietnamese_ci  | utf8 | 215 |   | Yes  |  8 |
| utf8_general_mysql500_ci | utf8 | 223 |   | Yes  |  1 |
| utf8mb4_general_ci  | utf8mb4 | 45 | Yes  | Yes  |  1 |
| utf8mb4_bin    | utf8mb4 | 46 |   | Yes  |  1 |
| utf8mb4_unicode_ci  | utf8mb4 | 224 |   | Yes  |  8 |
| utf8mb4_icelandic_ci  | utf8mb4 | 225 |   | Yes  |  8 |
| utf8mb4_latvian_ci  | utf8mb4 | 226 |   | Yes  |  8 |
| utf8mb4_romanian_ci  | utf8mb4 | 227 |   | Yes  |  8 |
| utf8mb4_slovenian_ci  | utf8mb4 | 228 |   | Yes  |  8 |
| utf8mb4_polish_ci  | utf8mb4 | 229 |   | Yes  |  8 |
| utf8mb4_estonian_ci  | utf8mb4 | 230 |   | Yes  |  8 |
| utf8mb4_spanish_ci  | utf8mb4 | 231 |   | Yes  |  8 |
| utf8mb4_swedish_ci  | utf8mb4 | 232 |   | Yes  |  8 |
| utf8mb4_turkish_ci  | utf8mb4 | 233 |   | Yes  |  8 |
| utf8mb4_czech_ci   | utf8mb4 | 234 |   | Yes  |  8 |
| utf8mb4_danish_ci  | utf8mb4 | 235 |   | Yes  |  8 |
| utf8mb4_lithuanian_ci | utf8mb4 | 236 |   | Yes  |  8 |
| utf8mb4_slovak_ci  | utf8mb4 | 237 |   | Yes  |  8 |
| utf8mb4_spanish2_ci  | utf8mb4 | 238 |   | Yes  |  8 |
| utf8mb4_roman_ci   | utf8mb4 | 239 |   | Yes  |  8 |
| utf8mb4_persian_ci  | utf8mb4 | 240 |   | Yes  |  8 |
| utf8mb4_esperanto_ci  | utf8mb4 | 241 |   | Yes  |  8 |
| utf8mb4_hungarian_ci  | utf8mb4 | 242 |   | Yes  |  8 |
| utf8mb4_sinhala_ci  | utf8mb4 | 243 |   | Yes  |  8 |
| utf8mb4_german2_ci  | utf8mb4 | 244 |   | Yes  |  8 |
| utf8mb4_croatian_ci  | utf8mb4 | 245 |   | Yes  |  8 |
| utf8mb4_unicode_520_ci | utf8mb4 | 246 |   | Yes  |  8 |
| utf8mb4_vietnamese_ci | utf8mb4 | 247 |   | Yes  |  8 |
+--------------------------+---------+-----+---------+----------+---------+

使用不同的比较规则对数据进行比较,结果可能是不一样的。

字符集和比较规则是对应的,不管是只修改字符集还是只修改比较规则,另一方都会相应地自动变化。

四个级别的字符集和比较规则

上文提到了字符集和比较规则,实际上在mysql里面有不同级别的字符集和比较规则:

服务器级别的字符集可以看参数 character_set_server ,服务器级别的比较规则可以看参数 collation_server


mysql> show variables like 'character_set_server';
+----------------------+-------+
| Variable_name  | Value |
+----------------------+-------+
| character_set_server | utf8 |
+----------------------+-------+
1 row in set (0.00 sec)

mysql> show variables like 'collation_server';
+------------------+-----------------+
| Variable_name | Value   |
+------------------+-----------------+
| collation_server | utf8_general_ci |
+------------------+-----------------+
1 row in set (0.00 sec)

如果要查看数据库级别的字符集和比较规则,那么可以先 use xxxdb 切换到具体的数据库,然后执行 show variables like 'character_set_database' 和 show variables like 'collation_database' 来查看该数据库的字符集和比较规则。


Database changed
mysql> show variables like 'character_set_database';
+------------------------+-------+
| Variable_name   | Value |
+------------------------+-------+
| character_set_database | utf8 |
+------------------------+-------+
1 row in set (0.00 sec)

mysql> show variables like 'collation_database';
+--------------------+-----------------+
| Variable_name  | Value   |
+--------------------+-----------------+
| collation_database | utf8_general_ci |
+--------------------+-----------------+
1 row in set (0.00 sec)

如果要查看某个表的字符集和比较规则,或者表中的某个列的字符集和比较规则,那么可以使用 show create table xxxtb 来查看具体的建表语句,里面就有使用的字符集和比较规则。

如果创建数据库的时候没有指定字符集和比较规则,则会使用服务器级别的字符集和比较规则作为数据库的字符集和比较规则。如果创建和修改表的语句中没有指明字符集和比较规则,将使用该表所在数据库的字符集和比较规则作为该表的字符集和比较规则

三个系统变量

mysql服务器可以对应多个客户端,而这些客户端的编码方式可能不同,但存在数据库里的数据的字符集是一定的,mysql就要针对不同的客户端进行编码转换处理,然后返回结果给客户端。

在mysql里面,有三个 SESSION级别 的系统变量,可以进行上述操作:

  • character_set_client : 服务器解码客户端请求时使用的字符集
  • character_set_connection : 服务器处理请求时会把请求字符串从character_set_client转为character_set_connection
  • character_set_results : 服务器向客户端返回数据时使用的字符集

mysql服务器会为每个客户端都维护一份session级别的这三个变量。

不过在实际生产环境中,为了避免麻烦,公司一般都会有规范规定客户端默认都使用utf8字符集。

以上就是mysql字符集相关总结的详细内容,更多关于mysql字符集的资料请关注自学编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: mysql字符集相关总结

本文链接: https://www.lsjlt.com/news/10189.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • mysql字符集相关总结
    这边笔记主要记录一下对mysql字符集相关知识的学习 字符集 一般我们使用如下语句创建一张表,创建表的时候指定了charset为utf8编码。 CREATE TABLE `test` ( `c1` int U...
    99+
    2022-05-22
    MySQL 字符集
  • mysql字符集相关系统变量
    这期内容当中小编将会给大家带来有关mysql字符集相关系统变量,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 character_set_s...
    99+
    2022-10-19
  • mysql字符集相关知识大全
    本篇内容介绍了“mysql字符集相关总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!这边笔记主要记录一下对mysql字符集相关知识的学习字...
    99+
    2023-06-07
  • mysql数据库字符集学习总结
    MYSQL数据库字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念。MYSQL 支持的字符集和校对规则可以通过命令showcharacter set;查看。和字符集有关的变量my...
    99+
    2022-10-18
  • MySQL 5.5客户端字符集相关参数
    character_set_client 在客户端发出SQL语句所使用的字符集。 collation_connection 连接所使用的字符集校对规则 character_set_results 返...
    99+
    2022-10-18
  • MySQL InnoDB 锁的相关总结
    1.  Shared and Exclusive Locks shared lock (译:共享锁) exclusive lock (译:排它锁、独占锁) InnoDB实现了标准的行级锁,其中有两种类型的锁...
    99+
    2022-05-16
    MySQL InnoDB InnoDB锁
  • mysql的相关设置总结
    下文给大家带来关于mysql的相关设置总结,感兴趣的话就一起来看看这篇文章吧,相信看完mysql的相关设置总结对大家多少有点帮助吧。1.安装MySQL    使用管理...
    99+
    2022-10-18
  • MySQL 字符串截取相关函数小结
    文中给大家介绍MySQL 字符串截取相关函数,具体内容如下所示: 在工作中,可能需要将某些字段按某个分割符组成一个字符串作为字段值存取到数据库表中,比如某个任务对应三个结果,分别存储在不同的数据表中,这时可...
    99+
    2022-10-18
  • Android字体相关知识总结
    目录一、Android 默认字体介绍二、textStyle三、typeface四、fontFamily 五、textStyle,typeface,fontFamily 三者...
    99+
    2022-11-12
  • MySQL中GBK字符集和UTF8字符编码的相关操作
    下面讲讲关于MySQL中GBK字符集和UTF8字符编码的相关操作,文字的奥妙在于贴近主题相关。所以,闲话就不谈了,我们直接看下文吧,相信看完MySQL中GBK字符集和UTF8字符编码的相关操作这篇文章你一定...
    99+
    2022-10-18
  • MySQL数据迁移相关总结
    前言: 在平时工作中,经常会遇到数据迁移的需求,比如要迁移某个表、某个库或某个实例。根据不同的需求可能要采取不同的迁移方案,数据迁移过程中也可能会遇到各种大小问题。本篇文章,我们一起来看下 MySQL 数据迁移那些事...
    99+
    2022-05-20
    MySQL 迁移 MySQL 数据迁移
  • MySQL InnoDB架构的相关总结
    目录引言1、Mysql数据库整体架构SQL接口解析器优化器执行器存储引擎2、InnoDB存储引擎架构内存缓冲池undo log日志文件redolog日志文件binlog日志文件InnoDB执行流程引言 作为一个后端...
    99+
    2022-05-28
    MySQL InnoDB MySQL InnoDB架构
  • MySQL 日志相关知识总结
    数据库中用于存储数据的文件称为data file,日志文件称为log file。此外,如果每次读写都是直接访问磁盘,性能很差,所以数据库是有缓存的,数据缓存是data buffer,日志缓存log buffer。 s...
    99+
    2022-05-21
    MySQL 日志
  • MySQL 锁的相关知识总结
    MySQL中的锁 锁是为了解决并发环境下资源竞争的手段,其中乐观并发控制,悲观并发控制和多版本并发控制是数据库并发控制主要采用的技术手段(具体可见我之前的文章),而MySQL中的锁就是其中的悲观并发控制。 MySQ...
    99+
    2022-05-14
    MySQL
  • MySQL权限相关知识总结
    本篇内容主要讲解“MySQL权限相关知识总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL权限相关知识总结”吧! 一.权限表 mysql中的3个权...
    99+
    2022-10-18
  • Java集合的总体框架相关知识总结
    目录一、集合概述二、集合在开发中的应用三、集合存储的数据四、集合的包五、集合的两大类一、集合概述 数组其实就是一个集合。集合实际上就是一个容器。可以来容纳其它的数据。 二、集合在开发...
    99+
    2022-11-12
  • 操作MySQL表相关要义总结
    下面讲讲关于操作MySQL表相关要义,文字的奥妙在于贴近主题相关。所以,闲话就不谈了,我们直接看下文吧,相信看完操作MySQL表相关要义这篇文章你一定会有所受益。使用编辑器编辑指令edit创建表create...
    99+
    2022-10-18
  • MySQL 慢日志相关知识总结
    目录  1.慢日志简介  2.慢日志实战  1.慢日志简介 慢日志全称为慢查询日志(Slow Query Log),主要用来记录在 MySQL 中执行时间超过指定时间的 SQL 语句。通...
    99+
    2022-05-22
    MySQL 慢日志
  • 转:Mysql 分区 分表相关总结
    拆分策略选择 其实拆分很灵活,有的是垂直切分,将一个库拆成两个或多个,将有相关联的表放在一个库里。有的是水平切分将数据量大的表按照一定逻辑进行拆分。个人感觉垂直切分的相对来说缓解了IO的瓶颈,而水...
    99+
    2022-10-18
  • 【mysql】索引相关的个人总结
    重点参考: MySQL索引原理及慢查询优化 (美团技术分享网站):原理、示例优化都写的很好。 索引很难么?带你从头到尾捋一遍MySQL索引结构,不信你学不会!:原理写的很好。 【从入门到入土】令人脱发的数据库底层设计:很详细...
    99+
    2016-06-26
    【mysql】索引相关的个人总结
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作