MySQL utf8字符集转换到utf8mb4

 提示:转载请注明原文链接

 本文永久链接:https://360us.net/article/42.html

mysql的utf8并不是完整的utf8,只能存储最多三个字节的字符,而完整的utf8编码是一个字符最多可以占用4个字节的。
这就导致一些4个字节的字符不能存进utf8编码的表里面,比如emoji表情符号。


mysql5.5.3版本的时候新增了一个新的字符集,叫做utf8mb4,这个就是真正的utf8编码的,也可以直接存储emoji表情符号。
utf8mb4的字符范围是包含utf8的,所以,我们可以直接把当前数据库的编码转换成utf8mb4,不会有任何问题。


为了避免以后因为字符范围而导致的问题,我们在新建数据库的时候也应该用utf8mb4代替utf8作为默认的字符编码。
校验规则的话utf8mb4_general_ciutf8mb4_unicode_ci都是可以得,mysql默认是前者,前者校验速度较快,后者则更准确一点。


那么如何把当前数据库的编码由utf8转换为utf8mb4呢?
我们需要下面几步:
首先,我们先备份下原来的数据库,是吧?为了保险起见。
然后呢!再核对下msyql的版本号,如果版本低于5.5.3的话就先升级一下吧!
第三步,修改数据库,表和列,数量少的话可以直接执行sql语句:

#修改数据库编码
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

#修改表
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

#修改列
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;


第四步是修改连接,客户端和服务器的编码,这个可以修改my.cnf配置文件:

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4

重启msyql之后,登录,如下方式查看变更:

mysql> 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     | utf8               |
| collation_connection     | utf8mb4_unicode_ci |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8mb4_unicode_ci |
+--------------------------+--------------------+
10 rows in set (0.00 sec)

上面第三步修改数据库、表编码,如果很多表,显然很不方便。
我们可以通过mysqldump工具导出数据,修改编码之后再次导入的方法,方便快捷。
命令类似下面这样导出:

mysqldump -h localhost -u username -p -B db | sed 's/AUTO_INCREMENT=[0-9]*\s//g' > db.sql

最后就是修改程序连接msyql服务器的编码为utf8mb4了,再就是搞点数据测试一下了。

最最后,这里有篇老外的文章可供参考,比较完整的过程,我就是参考哪里搞得,有些步骤我也没做。

文章链接:https://mathiasbynens.be/notes/mysql-utf8mb4

 评论
暂无评论