windows系统,将mysql字符集utf8mb3升级成utf8mb4

文章目录

概要

mysql默认的的字符集是utf8mb3,存储表情等一些数据时不能正常显示,在此记录下如何升级到utf8mb4

升级步骤

1.先备份现有数据,防止后续有问题造成数据丢失

2.修改现有数据库,数据表的字符集为utf8mb4_unicode_ci
修改库:ALTER DATABASE your_database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
修改表:ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
也可以通过客户端mysql_workbench直接修改;

3.修改配置文件my.ini(通常在C:\ProgramData\MySQL\MySQL Server 8.0),修改后重启mysql服务
[client]
Default-character-set = utf8mb4
[mysql]
Default-character-set = utf8mb4
[mysqld]
Character-set-lient-andshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = ‘SET NAMES utf8mb4’
skip-character-set-client-handshake = true

**注意:**1. my.ini修改后需要存为ANSI格式(默认utf-8),不然会启动不了mysql服务

4.重启后查看参数变化:
SHOW VARIABLES WHERE variable_name LIKE ‘character_set_%’ OR variable_name LIKE ‘collation%’;

+--------------------------+---------------------------------------------------------+
| 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     | utf8mb3                                                 |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 8.0\share\charsets\ |
| collation_connection     | utf8mb4_unicode_ci                                      |
| collation_database       | utf8mb4_unicode_ci                                      |
| collation_server         | utf8mb4_unicode_ci                                      |
+--------------------------+---------------------------------------------------------+
**注:**character_set_system 一直都会是 utf8,不能被更改

5.检查字段的最大长度和索引列(参考https://www.cnblogs.com/wang666/p/10282755.html)

字段长度
由于从utf8升级到了utf8mb4,一个字符所占用的空间也由3个字节增长到4个字节,但是我们当初创建表时,设置的字段类型以及最大的长度没有改变。例如,你在utf8下设置某一字段的类型为TINYTEXT, 这中字段类型最大可以容纳255字节,三个字节一个字符的情况下可以容纳85个字符,四个字节一个字符的情况下只能容纳63个字符,如果原表中的这个字段的值有一个或多个超过了63个字符,那么转换成utf8mb4字符编码时将转换失败,你必须先将TINYTEXT更改为TEXT等更高容量的类型之后才能继续转换字符编码

索引
在InnoDB引擎中,最大的索引长度为767字节,三个字节一个字符的情况下,索引列的字符长度最大可以达到255,四个字节一个字符的情况下,索引的字符长度最大只能到191。如果你已经存在的表中的索引列的类型为VARCHAR(255)那么转换utf8mb4时同样会转换失败。你需要先将VARCHAR(255)更改为VARCHAR(191)才能继续转换字符编码

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值