栏目头部广告

MySQL字符集变量介绍

一、字符集简介

1.1 ASCII

ASCII (American Standard Code for Information Interchange) - 美国信息交换标准代码。由于计算机最初只支持英文,最先出现的字符编码:ASCII 码。ASCII 码采用 1 个字节编码,共定义了128个字符。

英文字符:1 字节

中文字符:不支持

1.2 GB2312

GB2312是一种双字节编码,由中国国家标准总局1980年发布,1981年5月1日开始使用。

英文字符:1 字节

中文字符:2 字节

1.3 GBK

Chinese Internal Code Specification。GBK是一种双字节编码,1995年制定并正式发布,GBK向下与GB2312编码兼容。

英文字符:1 字节

中文字符:2~4 字节

1.4 GB18030

信息交换用汉字编码字符集基本集的扩充。GB18030 是最新的汉字编码字符集国家标准, 向下兼容 GBK 和 GB2312 标准。

英文字符:1 字节

中文字符:2~4 字节

1.5 Unicode

Unicode(统一码、万国码、单一码),用两个字节表示一个字符,1994年正式公布。

英文字符:4 字节

中文字符:4 字节

1.6 UTF-8

UTF-8是一种针对Unicode的可变长度字符编码,又称万国码,由Ken Thompson于1992年创建。UTF-8用1到6个字节编码Unicode字符。ASCII字符在utf-8编码格式中占用一个字节,汉子则占用三个字节。

英文字符:1字节

中文字符:3 ~ 4字节

Unicode是编码字符集,而UTF-8就是字符编码,即Unicode规则字库的一种实现形式。

1.7 UTF-16

任何字符对应的数字都用两个字节来保存。不兼容ASCII。

英文字符:4 字节

中文字符:4 字节

1.8 BIG5

大五码或五大码。BIG5 是通行于台湾、香港地区的一个繁体字编码方案。

英文字符:1 字节

中文字符:2 字节

1.9 ISO-8859-1(即latin1)

除ASCII收录的字符外,还包括西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。

英文字符:1

中文字符:不支持

MySQL字符集变量设置(图1)

GBK需要转换为UTF-8格式流程:

(1)首先通过编码【decode】转换为Unicode编码

(2)然后通过解码【encode】转换为UTF-8的编码

UTF-8需要转为为GBK格式流程:

(1)首先通过编码【decode】转换为Unicode编码编码

(2)然后通过解码【encode】转换为GBK的编码

二、MySQL字符集介绍

2.1 MySQL常用字符集简介

MySQL字符集变量设置(图2)

【注】utf8mb4编码,mb4是most bytes 4的意思,专门用来兼容四字节的unicode。且utf8mb4比utf8多了emoji(表情包)编码支持。

2.2 MySQL字符集相关参数介绍

MySQL官网介绍:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html

MySQL字符集变量设置(图2)

8个字符集相关变量解读:

(1)character_set_client      # 客户端使用的字符集
(2)character_set_connection  # 连接数据库时的字符集,如果程序中没有指明连接数据库使用的字符集类型则按照这个字符集设置
(3)character_set_database   # 数据库默认字符集,如果在创建数据库时没有设置编码格式,就按照这个格式设置。
(4)character_set_filesystem # 文件系统的编码格式,把操作系统上的文件名转化成此字符集,即把 character_set_client转换character_set_filesystem, 默认binary是不做任何转换的
(5)character_set_results   # 数据库给客户端返回时使用的编码格式,如果没有指明,使用服务器默认的编码格式
(6)character_set_server    # 服务器安装时指定的默认编码格式,这个变量建议由系统自己管理,不要人为定义
(7)character_set_system    # 数据库系统使用的编码格式,这个值一直是utf8,不需要设置,它是为存储系统元数据的编码格式
(8)character_sets_dir      # 字符集安装的目录

【注意】(4)、(7)、(8)三个变量为系统变量,不会影响乱码问题。正常我们只需要关注(1)、(2)、(3)、(5)、(6)五个变量是否满足业务需求即可。

2.3 字符集相关操作命令

show global variables like '%char%';    	                       # 查看RDS实例字符集相关参数设置
show global variables like 'coll%';     	                       # 查看当前会话字符序相关参数设置
show character set;                     	                       # 查看实例支持的字符集
show collation;                         	                       # 查看实例支持的字符序
show create table table_name \G         	                       # 查看表字符集设置
show create database database_name \G   	                       # 查看数据库字符集设置
show create procedure procedure_name \G 	                       # 查看存储过程字符集设置
show procedure status \G                	                       # 查看存储过程字符集设置
alter database db_name default charset utf8;                       # 修改数据库的字符集
create database db_name character set utf8;                        # 创建数据库时指定字符集
alter table tab_name default charset utf8 collate utf8_general_ci; # 修改表字符集和字符序

三、MySQL修改数据库字符集utf8mb4

3.1 修改前

MySQL [(none)]> SHOW VARIABLES LIKE 'char%';
+--------------------------+-----------------------------------------------------+
| Variable_name            | Value                                               |
+--------------------------+-----------------------------------------------------+
| character_set_client     | utf8                                                |
| character_set_connection | utf8                                                |
| character_set_database   | utf8                                                |
| character_set_filesystem | binary                                              |
| character_set_results    | utf8                                                |
| character_set_server     | utf8                                                |
| character_set_system     | utf8                                                |
| character_sets_dir       | /opt/udb/program/mysql/mysql-5.7.16/share/charsets/ |
+--------------------------+-----------------------------------------------------+
8 rows in set (0.01 sec)

show global variables;   # 查看当前所有的全局变量

[root@ansible ~]# vim /etc/my.conf #配置字符集为utf8mb4支持表情存储

[mysqld]
back_log = 2000
basedir = /opt/udb/program/mysql/mysql-5.7.12
bind-address = 127.0.0.1
binlog-format = ROW
binlog_rows_query_log_events = 1

#####增加以下4行#####
character_set_server = utf8mb4           #设置MySQL默认字符编码
collation-server=utf8mb4_general_ci      #指定MySQL默认的字符集及Collation。
skip-character-set-client-handshake=true #跳过MySQL程序起动时的字符参数设置 ,使用服务器端字符集设置
init_connect='SET NAMES utf8mb4'         #用户登录到数据库上之后,在执行第一次查询之前,执行的内容的

3.2 修改后

MySQL [(none)]> show variables like "char%";
+--------------------------+-----------------------------------------------------+
| Variable_name            | Value                                               |
+--------------------------+-----------------------------------------------------+
| character_set_client     | utf8                                                |
| character_set_connection | utf8                                                |
| character_set_database   | utf8mb4                                             |
| character_set_filesystem | binary                                              |
| character_set_results    | utf8                                                |
| character_set_server     | utf8mb4                                             |
| character_set_system     | utf8                                                |
| character_sets_dir       | /opt/udb/program/mysql/mysql-5.7.16/share/charsets/ |
+--------------------------+-----------------------------------------------------+
8 rows in set (0.01 sec)

四、修改客户端使用的字符集character_set_client

4.1 配置说明

业务侧指定客户端使用的字符集参数为utf8mb4(character_set_client)需要在客户端连接字符串里设置。

4.2 操作演示

(1)默认配置

mysql>  SHOW VARIABLES LIKE 'char%';
+--------------------------+-----------------------------------------------------+
| Variable_name            | Value                                               |
+--------------------------+-----------------------------------------------------+
| character_set_client     | utf8                                                |
| character_set_connection | utf8                                                |
| character_set_database   | utf8                                                |
| character_set_filesystem | binary                                              |
| character_set_results    | utf8                                                |
| character_set_server     | utf8                                                |
| character_set_system     | utf8                                                |
| character_sets_dir       | /opt/udb/program/mysql/mysql-5.7.16/share/charsets/ |
+--------------------------+-----------------------------------------------------+
8 rows in set (0.01 sec)

(2)session级别设置演示

[root@ansible ~]# mysql -uroot -h192.168.0.130 -P3306 -pUCloudcn --default-character-set=utf8mb4
mysql>  SHOW VARIABLES LIKE 'char%';
+--------------------------+-----------------------------------------------------+
| Variable_name            | Value                                               |
+--------------------------+-----------------------------------------------------+
| character_set_client     | utf8mb4                                             |
| character_set_connection | utf8mb4                                             |
| character_set_database   | utf8                                                |
| character_set_filesystem | binary                                              |
| character_set_results    | utf8mb4                                             |
| character_set_server     | utf8                                                |
| character_set_system     | utf8                                                |
| character_sets_dir       | /opt/udb/program/mysql/mysql-5.7.16/share/charsets/ |
+--------------------------+-----------------------------------------------------+
8 rows in set (0.00 sec)

作者:UStarGao
链接:https://www.starcto.com/mysql/163.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

UCloud云平台推荐


UCloud新用户专属注册连接

UCloud CDN超值特惠专场

UCloud全球云主机(UHost/VPS)大促页面

UCloud快杰云主机大促页面

文章页广告

随便看看

栏目底部广告
`