日期:2014-05-16  浏览次数:20927 次

mysql中文乱码终极解决方法
适合 linux and windows。

1.确定这些参数是以下值:
mysql> show variables like 'character%';
+--------------------------+-------------------------------------------+
| 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       | D:\MySQL\MySQL Server 5.0\share\charsets\ |
+--------------------------+-------------------------------------------+
7 rows in set (0.00 sec)
mysql> show variables like 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)
具体可以通过set global character_set_server = utf8或者通过改
/etc/my.cnf来完成,windows的就改安装目录下的my.ini。

2.确保数据库建库与建表都是utf charset;
a. 修改MYSQL数据库编码,如果是MYSQL数据库编码不正确: 可以在MYSQL执行如下命令: ALTER DATABASE test DEFAULT CHARACTER SET utf8;
以上命令就是将MYSQL的test数据库的编码设为utf8;
b. 修改MYSQL表的编码:ALTER TABLE category DEFAULT CHARACTER SET utf8;
以上命令就是将一个表category的编码改为utf8;
c. 修改字段的编码:
ALTER TABLE `test` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
以上命令就是将MYSQL数据库test表中 dd的字段编码改为utf8;

3.这样子完了,基本就可以了,如果使用命令行的模式去查询数据还是乱码,那么在查询前先执行 set names gbk;就可以了。为什么是gbk,我也还没弄明白。反正utf8是不work。