前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mysql字符集(1)--mysql从入门到精通(二)

Mysql字符集(1)--mysql从入门到精通(二)

作者头像
用户9919783
发布2022-07-26 11:49:52
3080
发布2022-07-26 11:49:52
举报
文章被收录于专栏:后端从入门到精通

上篇文章我们说了mysql客户端与服务端连接过程,分为tcp/ip连接,之后读取缓存,sql解码,语句优化,存储引擎:

mysql客户端与服务端连接过程---mysql从入门到精通(一)

我们都知道计算机只能存储二进制数据,那么怎么存储字符串呢?答案就是建立二进制与字符串的映射关系,这要清楚字符串的范围‘a’到‘z’;‘A’到’Z’,将字符串映射成二进制的过程叫编码,将二进制映射成字符串的过程叫解码。

Mysql中的utf8和utf8mb4字符集

上面常说的utf8字符集一个字符需要1~4个字节,但我们常用的1~3个字节就可以了,mysql中有两个定义:

  1. utf8mb3:阉割过得utf8字符集,1~3个字节。
  2. utf8mb4:使用的1~4个字节。

注意:mysql中utf8默认就是utf8mb3用的1~3个字节,如果需要四个字节,如emoji表情,,用utf8mb4字符集。

Utf8字符集:收录所有字符,而且在不断扩充,兼容ASCII字符集,采用长编码方式,编码一个字符需要1~4个字节。

ASCII字符集:共收录128个字符,包括空号,标点符号,数字,小小写字母和不可见字符等,采用一个字节进行编码。

ISO 8859-1字符集:收录256个字符,在ASCII字符集上扩充,也使用一个字节进行编码,字节别名latin1。

GB2312字符集:兼容ASCII字符集,如果该字符集在ASCII字符集中,则采用1字节编码,否则为2字节编码。

GBK字符集:在GB2312字符集上进行扩容。

一、服务器级别

服务器级别的字符集查看'character_set_database';和服务器比较规则查看'collation_server';

用mysql命令进入服务器,mysql -u root -p

代码语言:javascript
复制
mysql>  SHOW VARIABLES LIKE 'character_set_database';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| character_set_database | latin1 |
+------------------------+--------+
1 row in set (0.00 sec)
 
mysql> SHOW VARIABLES LIKE 'collation_server';
+------------------+-------------------+
| Variable_name    | Value             |
+------------------+-------------------+
| collation_server | latin1_swedish_ci |
+------------------+-------------------+
1 row in set (0.01 sec)

从结果中我们可以看到当前服务器的字符集Latin1也就是ISO 8859-1字符集。

那wediish代表瑞典的比较规则,_ci代表忽略大小写。

二、数据库级别

我们先创建一个create database utf_8 character utf8mb4;

然后show databases;挑选数据库后,use utf_8;进入数据库

代码语言:javascript
复制
mysql>  SHOW VARIABLES LIKE 'collation_database';
+--------------------+--------------------+
| Variable_name      | Value              |
+--------------------+--------------------+
| collation_database | utf8mb4_general_ci |
+--------------------+--------------------+
1 row in set (0.00 sec)
 
mysql> SHOW VARIABLES LIKE 'character_set_database';
+------------------------+---------+
| Variable_name          | Value   |
+------------------------+---------+
| character_set_database | utf8mb4 |
+------------------------+---------+

从结果可以看到,当前数据库的字符集是utf8mb4,数据的比较规则是通用的general。

三、表级别

我们也可以创建一个指定字符集的表:

代码语言:javascript
复制
create table utf8_table(id int) character set utf8mb4; Query OK, 0 rows affected (0.06 sec)

若创建的表没有指定字符集,则继承数据库的字符集。

四、列级别

需要注意,在同一个表中,不同的列也有属于自己不同的字符集,若没有指定字符集,则继承当前表的字符集。

代码语言:javascript
复制
ALTER TABLE 表名 MODIFY 列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称];
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后端从入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、服务器级别
  • 二、数据库级别
  • 三、表级别
  • 四、列级别
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档