Mysql中经常出现的乱码问题

Mysql中执行SET NAMES utf8这条SQl的作用

1)首先,Mysql服务器的编码和数据库的编码在配置文件my.ini中设置;
用记事本打开配置文件,修改代码:default-character-set=utf8,这里
保证了Mysql服务器以及数据库的编码是utf8;

2)打开Mysql的命令行客户端,执行SQL:
show variables like '%character%',结果有这几个编码集
character_set_client | gbk
character_set_connection | gbk
character_set_database | utf8
character_set_filesystem | binary
character_set_results | gbk
character_set_server | utf8
character_set_system | utf8

3)现在查看某张表里面带有中文的数据时,没有乱码,也可以插入中文数据
+---------+--------------+----------
| type_id | type_name | parent_id
+---------+--------------+----------
| 1 | 编程语言       | 0
| 2 | 静态编程语言 | 1
| 3 | 动态编程语言 | 1
| 4 | JavaScript   | 2
| 5 | Shell           | 2
| 6 | Perl            | 2
| 7 | C             | 3
| 8 | C++          | 3
| 9 | Java           | 3
| 10 | 呵呵呵      | 3


4)执行SQL:SET NAMES utf8,之后,在查看编码集
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

5)这时候再来查看带有中文的数据,就出现乱码了
type_id | type_name | parent_id
---------+--------------------+-----------
1 | 缂栫▼璇?█       | 0 |
2 | 闈欐€佺紪绋嬭?瑷€ | 1 |
3 | 鍔ㄦ€佺紪绋嬭?瑷€ | 1 |
4 | JavaScrip         | 2
5 | Shell               | 2
6 | Perl                 | 2
7 | C                    | 3
8 | C++                | 3
9 | Java                | 3
10 | 鍛靛懙鍛µ       | 3

而且也不能插入中文数据;

6)存数据的过程是:client->connection->server
取数据的过程是:server->connection->result

7)所以这三者
character_set_client
character_set_results
character_set_connection
是与命令行的编码同步的,命令行的编码为GBK

8)如果在程序中出现乱码问题,可以这样处理
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
与程序保证一致的utf8编码

原文地址:https://www.cnblogs.com/lianliang/p/5168442.html