[email protected]   15826058953
B2B外贸网站建设与运营,WEB服务器运维,始于2016。

MySQL修改字符编码格式为utf8mb4

2020-07-05     网络    

前一篇文章讲了MySQL不宜使用utf8字符编码格式,应使用utf8mb4,此篇文章讲如何设置以前修改MySQL数据库字符编码格式。

1.设置字符编码格式

查看当前数据库字符编码格式命令

show variables like "%char%";

如果你的数据库字符编码格式为utf8格式的,则显示内容大致如下:

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       | D:\phpStudy\PHPTutorial\MySQL\share\charsets\ |
+--------------------------+-----------------------------------------------+
8 rows in set (0.00 sec)

2.修改现有表及字符编码格式

找到my.cnf 文件(Linux下名为my.cnf,windows下名为my.ini),Linux的文件一般在/usr/local/mysql目录。

添加以下代码:(MySQL 版本需要在5.5.3及以上才支持utf8mb4,mysql 8.0 版默认utf8mb4,不需要设置)

[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

修改后重启MySQL,再使用[show variables like "%char%";]命令查看,会显示以下内容:

mysql> show variables like "%char%";
+--------------------------+-----------------------------------------------+
| Variable_name            | Value                                         |
+--------------------------+-----------------------------------------------+
| character_set_client     | utf8mb4                                       |
| character_set_connection | utf8mb4                                       |
| character_set_database   | utf8mb4                                       |
| character_set_filesystem | binary                                        |
| character_set_results    | utf8mb4                                       |
| character_set_server     | utf8mb4                                       |
| character_set_system     | utf8                                          |
| character_sets_dir       | D:\phpStudy\PHPTutorial\MySQL\share\charsets\ |
+--------------------------+-----------------------------------------------+
8 rows in set (0.00 sec)

修改数据库字符编码

alter database dbname character set utf8mb4 ;

修改数据库表的字符编码方式

alter table tablename convert to character set utf8mb4;
创建数据库指定数据库的字符集
create database dbname character set utf8;

修改数据库表指定字段的字符编码

alter table admin change field_1 field_1 varchar(255) character set utf8mb4 collate utf8mb4_unicode_ci;

3.修改后注意事项

字符集不对可能导致left join 等连接查询时索引不生效。

utf8mb4_unicode_ci 和utf8_general_ci 的字段索引没法匹配。

原来utf8 是使用3-byte 存储一个字符,现在变为了4-byte。

这种情况通常来讲会把255 长度的字符类型字段长度修改为191 。如果在该字段上存在索引,更应该注意。