IT技术博客大学习 共学习 共进步

Mysql 5 数据库 中文乱码问题的解决

Oracle Life 2010-06-02 23:06:55 浏览 2,741 次

昨天折腾了一下自己的网站,试图进行一些迁移工作,这其中遇到的首要问题是Mysql的乱码问题。

    由于Mysql是从版本 4迁移到Version 5的,原来的字符集是latin1,现在是UTF8,这就遇到了经典的乱码问题,即使通过phpadmin来访问,也是一片纷乱,还好在前端的展现正常。

    在网上搜一下,很多帖子和方法,最后我通过如下步骤,终于纠正了多年来的乱码问题。

    首先乱码是由于字符集的变化和混乱造成的。

    [root@localhost plugins]# /mysql -hlocalhost -ueygle -p eygle

    Enter password:

    Reading table information for completion of table and column names

    You can turn off this feature to get a quicker startup with -A

    Welcome to the MySQL monitor.  Commands end with ; or \\g.

    Your MySQL connection id is 1693469

    Server version: 5.0.45 Source distribution

    Type \'help;\' or \'\\h\' for help. Type \'\\c\' to clear the buffer.

    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     | utf8                             |

    | character_sets_dir       | /opt/mysql/share/mysql/charsets/ |

    +--------------------------+----------------------------------+

    8 rows in set (0.00 sec)

    现在的字符集是utf8,但是由于原来是latin1的字符集,我使用latin1进行导出:

    mysqldump -hlocalhost -ueygle -p --default-character-set=latin1 blog >blog.sql

    这样导出之后,如果打开看,正文应当都是正常显示才对,然后更改字符集,将所有表的字符集设置改为utf8,在vim中的命令是:

    :%s/latin1/utf8/g

    再执行导入操作:

    mysql -hlocalhost -ueygle -p eyglenew < blog.sql

    这样我终于看到了久违的,正确的中文,现在的数据库字符集看起来是这个样子的:

    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     | latin1                           |

    | character_set_system     | utf8                             |

    | character_sets_dir       | /opt/mysql/share/mysql/charsets/ |

    +--------------------------+----------------------------------+

    8 rows in set (0.00 sec)

    记录一下,供遇到此类情况的朋友参考。

建议继续学习

  1. windows下压缩包在linux解压乱码的解决办法 (阅读 5,301)
  2. Linux screen窗口中文乱码问题 (阅读 5,284)
  3. linux下vim的编译以及终端乱码的最终解决方案 (阅读 4,740)
  4. java中文乱码解决之道(六)—–javaWeb中的编码解码 (阅读 4,140)
  5. java中文乱码解决之道(一)—–认识字符集 (阅读 3,641)
  6. PHP截取汉字出现乱码的解决方法 (阅读 3,621)
  7. 解决PHPMailer邮件标题中文乱码 (阅读 3,543)
  8. 如何在PHP下载文件名中解决乱码 (阅读 3,460)
  9. Smarty截取中文乱码的解决办法 (阅读 3,322)
  10. 分割GBK中文遭遇乱码的解决 (阅读 2,920)