乱码就是字符集不一致才导致的问题,中文乱码有可能是gbk,latin1,utf8集合在一起的混乱局面:
首先,查看字符集:
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 | utf8 |
| character_set_system |latin1 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
8 rows in set (0.00 sec)
乱码的情况肯定是不一致的,需要设置成一致的字符集,此时要看database是什么字符集,database 字符集可以用show create database命令来查看,也可以use database; show variables like ‘%char%’;看set_database这一项,要设定和set_database的字符集一致;
set names latin1;
在查看一下:
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 | utf8 |
| character_set_system |latin1 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
8 rows in set (0.00 sec)
发现character_set_server 还是没有变为utf8,这样设置:
set character_set_server=latin1;
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 |latin1 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
8 rows in set (0.00 sec)
select * from table; 查看结果是不是乱码,如果不是乱码就可以导出了,建议这时候用sqlyog登录,导出sql代码的insert语句
PS:
建议先用putty登录到服务器,执行上面的所有操作看看得到的结果是否乱码;
此时要记得设置一下putty的登录编码,设置为和数据库一致的字符集,如果看到的是中文的了,就可以做同样的操作在sqlyog里导出了;
有可能做完操作之后在sqlyog里显示的还是乱码,这是因为你的sqlyog客户端使用的编码的问题,不用管,只要登录putty时做完操作之后看到是中文就好了;
在sqlyog里导出insert的sql代码然后改变字符集,在新的数据库里执行sql语句来创建数据表就好了
现在在研究MySQL啊~
MySQL跟PHP黄金搭档啊~~