进入mysql查看当前编码:
show variables like "%char%";
+--------------------------+----------------------------+
| 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 | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
我的除了 character_set_system之外其他都是latin1,拉丁字母不支持中文所以会乱码。而在PHP中设置set names utf8实际上相当于同时设置以下三条
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
并不能解决问题。
解决步骤如下:
vim /etc/my.cnf
在[client]下新增: default-character-set=utf8
(如果没有client这一项就自己写个client)
在[mysqld]下新增:
default-character-set=utf8
init_connect='SET NAMES utf8'
然后重启mysql服务:
service mysqld restart
再进入Mysql查看编码发现就是utf8了:
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 | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)