各位大虾,这是本人每一次写blog.在这其中看到很多人都会为了mysql的乱码问题而发愁.我也是最近才了解到的这些问题,也有一些个人理解,如果说的不对,大家一定要指出来.共同进步.言归正转.
mysql> show variables like '%char%' ;
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | C:/Program Files/MySQL/MySQL Server 5.0/share/charsets/ |
+--------------------------+---------------------------------------------------------+
大家看到这些字符了,他们的编码都是utf8的 先给大家说一下 character_set_connection | utf8 这个是服务端的编码,
character_set_client | utf8 这个是我们终端编码 character_set_results | utf8 这个是结果集的编码 .
+----------+----------+----+
| password | username | id |
+----------+----------+----+
| | 王琪 | 1 |
| wan | 王琪 | 2 |
| wan | 大家好 | 4 |
+----------+----------+----+
3 rows in set
这个是在utf_8下面显示的情况
那么我们现在给他的编码改成GBK,看会是什么样子的
mysql> show variables like '%char%' ;
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | utf8 |
| character_set_results | gbk |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | C:/Program Files/MySQL/MySQL Server 5.0/share/charsets/ |
+--------------------------+---------------------------------------------------------+
7 rows in set
看我们已经把三个主要的编码改成gbk了.
+----------+----------+----+
| password | username | id |
+----------+----------+----+
| | | 1 |
| wan | | 2 |
| wan | | 4 |
+----------+----------+----+
出现了乱码的情况.这是什么原因呢? 是因为在数据库里面存的数据是UTF8的三位编码.而gbk 是二位的编码.所以会出现这样的情况.
这样我现在给大家在重新说一下这三个编码:我们在终端写SQL语句,他会通过client的编码方式给转码,到服务端又通过connection在给过来.如果有结果集会把结果集用你规定的编码封装好返回来.这就是整个sql执行的过程.好了,就说这么多.可能说的不太好.也不是很具体,请大家见谅.希望对大家有帮助