解决mysql导出数据的乱码问题

乱码就是字符集不一致才导致的问题,中文乱码有可能是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语句来创建数据表就好了

2条评论

CONEY进行回复 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注