WenRou's Blog

新浪微薄腾讯微薄

最新碎语:测试图片碎语哦

您的位置:WenRou's Blog >lnamp> MySQL乱码问题以及utf8mb4字符集

MySQL乱码问题以及utf8mb4字符集

1、为什么要使用 utf8mb4 编码
根本的原因在于,采用 utf8 编码的 MySQL 无法保存占位是4个字节的 Emoji 表情。MYSQL 5.5 之前, UTF8 编码只支持1-3个字节
为了使后端的项目,全面支持客户端输入的 Emoji 表情,升级编码为 utf8mb4 是最佳解决方案。
强调:因为utf8mb4是utf8的超集,理论上即使client修改字符集为utf8mb4,也会不会对已有的utf8编码读取产生任何问题。

2、查看是否支持utf8mb4?

现在SSH中输入命令:  mysql -uroot -p
输入密码后进入mysql,然后再输入下面命令,确认 mysql server 是否支持 utf8mb4 编码。
mysql> SHOW CHAR SET WHERE Charset LIKE "%utf8%";
我们会看见如下显示:
+---------+---------------+--------------------+--------+
| Charset | Description   | Default collation  | Maxlen |
+---------+---------------+--------------------+--------+
| utf8    | UTF-8 Unicode | utf8_general_ci    |      3 |
| utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci |      4 |
+---------+---------------+--------------------+--------+
或者用下面的语句也可。
mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
此时会显示如下内容,表示支持utf8mb4
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 |
+--------------------------+--------------------+
 rows in set (0.00 sec)
至于排序规则(collation) 选择默认的 utf8mb4_general_ci,还是 utf8mb4_unicode_ci。
一般来说从排序的准确性,以及性能方面,我们应该选用 utf8mb4_unicode_ci 。

3、修改方法
服务器端,修改数据库配置文件/etc/my.cnf
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
lower_case_table_names = 1

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysql.server]
default-character-set = utf8mb4

[mysqld_safe]
default-character-set = utf8mb4

4、记得重启mysql.
win下面执行下列语句
net stop mysql 
net start mysql
linux下面执行如下语句即可
service mysqld restart



 

---

转载请注明本文标题和链接:《MySQL乱码问题以及utf8mb4字符集

发表评论

73 + 1 =
路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交