修复MySQL数据表latin1编码导致中文乱码问题

在web端phpmyadmin中进行查询:
show variables like ‘%char%’
Variable_name Value
character_set_client utf8mb4
character_set_connection utf8mb4
character_set_database utf8
character_set_filesystem binary
character_set_results utf8mb4
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/share/percona-server/charsets/

ssh登录到服务器之间命令行下查询:
mysql> show variables like ‘%char%’;
Current database: singlesi_wrdp2
+————————–+————————————-+
| Variable_name | Value |
+————————–+————————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/percona-server/charsets/ |
+————————–+————————————-+
8 rows in set (0.01 sec)

ssh登陆查询的文字内容都可以正确显示中文,而phpmyadmin查询中文出乱码,网页编码方式同phpmyadmin。实际有两种修改方式,一是改web端链接方式与字符串,另一种是改mysql存储数据表的编码。第二种方式更彻底,因此选二。

参考链接:mysql数据表latin1编码导致中文乱码问题
解决方案是将表和字段编码格式修改为utf8mb4,
ALTER TABLE table DEFAULT CHARACTER SET utf8mb4;
修改了表的编码格式,但有一些字段比如text仍然是使用Latin1编码的。使用上面的命令可以看字段的编码格式。
show create table wp_comments;
修改了表的编码格式,但有一些字段比如text仍然是使用Latin1编码的。
使用下面的命令可以看字段的编码格式。
alter table wp_comments change comment_content comment_content text character set utf8mb4 not null;
如果一个个的修改嫌麻烦,还可以直接执行下面的命令,修改一张表的全部字段编码格式。
–修改表的编码格式
ALTER TABLE wp_comments DEFAULT CHARACTER SET utf8mb4;
–修改表中所有字段的编码格式
ALTER TABLE wp_comments CONVERT TO CHARACTER SET utf8mb4;
但以上只是修改了编码格式,但存储的内容还是以latin1识别的形式存放的,依然乱码。这时候可以通过对字段内容编码转换后进行更新。如果不放心,可以先找一条记录进行测试:
UPDATE wp_comments
SET comment_author = CONVERT (unhex (hex (CONVERT (comment_author USING latin1))) using utf8mb4) WHERE comment_id = 2;
然后找出表中所有需要修改的字段进行逐一修改。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部