一次建表时显示中文正常,建表后查询却是乱码。

1
2
3
4
5
6
7
8
mysql> show tables;
+ ----------------+
| Tables_in_test |
+ ----------------+
| ?????          |
| table1         |
+ ----------------+
rows  in  set  (0.00 sec)

一般出现这种情况是因为客户端和服务端的编码类型不一致导致。


查看一些客户端和服务端的编码类型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql>  show variables  like  "%char%"
+ --------------------------+----------------------------+
| Variable_name            | Value                      |
+ --------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | utf8                       |
| character_set_filesystem |  binary                      |
| character_set_results    | latin1                     |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+ --------------------------+----------------------------+
rows  in  set  (0.00 sec)
 
mysql>


从中可以看出服务端是utf8,而客户端是latin,临时设置一下客户端编码:

1
2
3
SET  character_set_client= 'utf8' ;  
SET  character_set_connection= 'utf8' ;  
SET  character_set_results= 'utf8' ;


再次查看一下表是否乱码:

1
2
3
4
5
6
7
8
mysql> show tables;                          
+ -----------------+
| Tables_in_test  |
+ -----------------+
| 学生信息表 |
| table1          |
+ -----------------+
rows  in  set  (0.00 sec)


果然是编码不一致导致,解决:


1.如果是数据库编码不一致导致乱码,则需要修改数据库的编码类型:


1
2
show  create  database  test;
alter  database  test  character  set  utf8  COLLATE  utf8_general_ci;


2.如果是客户端问题,则需编辑配置文件,添加如下一行:

1
2
[client]
default-character- set =utf8