今天继续给大家介绍MySQL相关知识,本文主要内容是MySQL字符集。

一、MySQL字符集简介

字符集规定了字符在数据库中的存储格式,比如占多少空间,支持哪些字符等等。不同的字符集有不同的编码规则,在有些情况下,甚至还有校对规则的存在。在运维和使用MySQL数据库中,选取合适的字符集非常重要,如果选择不恰当,轻则影响数据库性能,严重的可能导致数据存储乱码。
常见的MySQl字符集主要有以下四种:

字符集

长度

说明

GBK

2

支持中文,但是不是国际通用字符集

UTF-8

3

支持中英文混合场景,是国际通用字符集

latin1

1

MySQL默认字符集

utf8mb4

4

完全兼容UTF-8,用四个字节存储更多的字符

MySQL数据库在开发运维中,字符集选用规则如下:
1、如果系统开发面向国外业务,需要处理不同国家、不同语言,则应该选择utf-8或者utf8mb4。
2、如果只需要支持中文,没有国外业务,则为了性能考虑,可以采用GBK。

二、查看和设置MySQL字符集

(一)查看当前字符集设置

执行命令:

show character set\G

可以查看MySQL数据库所支持的字符集,结果如下所示:

EF mysql连接字符串加端口 mysql 连接字符串 字符集_数据库


执行命令:

show variables like 'character_set%';

可以查看MySQL数据库中关于字符集的相关设置,如下所示:

EF mysql连接字符串加端口 mysql 连接字符串 字符集_EF mysql连接字符串加端口_02

(二)更改默认字符集

当我们在创建数据表时,如果不刻意指定字符表中的字符集,那么MySQL数据库就会根据该表所处于的数据库的设置,自动的为其指定字符集。在默认情况下,数据表的字符集为latin,如下所示:

EF mysql连接字符串加端口 mysql 连接字符串 字符集_数据库_03


我们可以使用如下语句更改数据库的默认字符集:

alter database zzp default character set utf8;

更改后如下所示:

EF mysql连接字符串加端口 mysql 连接字符串 字符集_mysql_04


这样,当我们再次创建数据表时,该表的默认字符集就是utf-8了,结果如下所示:

EF mysql连接字符串加端口 mysql 连接字符串 字符集_数据库_05

(三)在创建表时指定字符集

除了上述方式外,如果我们只想针对某个数据表来指定字符集,可以在创建数据表时进行指定,如下所示:

alter table student character set 'gbk';

这样,就能够之帝国student数据表的字符集为GBK。
但是,如果在数据表已经创建,想要后期更改的话,特别是在已经插入数据的情况下,是一件比较麻烦的事情,因为很有可能造成数据表中数据的乱码,关于数据表在创建并插入数据后更改字符集的方式请看第三章。

三、更改MySQL字符集

在生产环境中,我们常常遇上以下情景,业务场景在已经运行一段时间了,并且已经存储有大量的数据。此时,业务出现拓展,需要更为维护数据库,必须更换字符集。如果我们直接使用alter语句修改,则有可能出现数据乱码的风险。 想要更改已经创建并插入数据的数据表的字符集,需要利用到数据库导入导出的知识,具体来说,更改MySQL数据库默认字符集,需要有以下步骤:

1、分别导出建立数据表(有时要更改一个数据库的字符集可以连同建立数据库的语句一起导出)和数据的语句。
2、使用sed命令对建立数据表(库).sql文件中的数据表进行批量修改。
3、修改MySQL服务端和客户端编码为UTF-8。
4、删除原有的数据表(库)。
5、导入之前的建表(库)语句。
6、导入之前的数据.sql备份文件。
这样,就可以成功修改MySQL的字符集了。