事件:从A服务器搬数据库到B 背景:A,B服务器版本都为Mysql 5.1.45 A服务器早已配置好,并一直在使用,一切正常。B服务器是用source新安装的# ./configure --prefix=/mysql --enable-thread-safe-client --without-debug 搬完之后 latin1_swedish_ci 类型的数据库不会出现乱码
但utf8_general_ci的不能正常使用,在SET NAMES GBK 的时候出错提示:Unknown character set: 'GBK'
上网查得到 ./configure --prefix=/mysql --enable-thread-safe-client  with-charset=gb2312 --with-extra-charsets=all可解决。(./configure --prefix=/mysql --enable-thread-safe-client  --with-extra-charsets=complex 也试过)重新安装之后utf8_general_ci可以正常使用,但latin1_swedish_ci查出来的竟然全是乱码。到底是什么问题呢?项目急啊,请路过的朋友尽量帮帮忙,小弟在线等。问题补充:
加上with-charset=gb2312 --with-extra-charsets=all编译,重新安装完数据库后,再开启数据库时不会有乱码,无意中重启apache后 就全是乱码了。狂晕~

解决方案 »

  1.   

    Server characterset:    latin1
    Db     characterset:    latin1
    Client characterset:    latin1
    Conn.  characterset:    latin1
    这几个字符集要改成和你A库的一致 
      

  2.   

    麻烦楼上说清楚一点,是改 my.cnf 吗?这几个字符集在哪改啊?
      

  3.   

    问题解决了!!!
    在my.cnf 
    加上
    Server characterset: latin1
    Db characterset: latin1
    Client characterset: latin1
    Conn. characterset: latin1
    重启Mysql即可.非常感谢,感谢楼上,感谢CSDN!昨天上网查了好久,试了半天都没弄出来,早知道早上来问问好了。
      

  4.   

    要是你程序里连接时没有指定字符集 你可以在my.cnf文件里
    [client]
    #password       = [your_password]
    port            = 3306
    socket          = /tmp/mysql.sock
    loose-default-character-set=latin1
    添加最下边那一行,最好还要看看你A库有没有设置 ,和A库保持一致
      

  5.   

    再试了一下。把my.cnf的注释了一下
    #Server characterset: latin1
    #Db characterset: latin1
    #Client characterset: latin1
    #Conn. characterset: latin1加上 loose-default-character-set=latin1; 重启后也不会出乱码。奇怪的是 把 #loose-default-character-set=latin1; 也注释了后也行。可能是设置一次就行了。看了一下A数据库的my.cnf 以上两个都没设置。好了,谢谢大哥们,结贴了。