【转】mysql5.1以上版本中文乱码的解决方法

转自:http://www.jerrymouse.net/content/mysql51%E4%BB%A5%E4%B8%8A%E7%89%88%E6%9C%AC%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95

这几天新配了一台centos5.5服务器(64位),安装了mysql5.5版本,安装后发现存入数据库后的中文为乱码,按照以前的方式(mysql5.1以前的版本),从/usr/share/mysql目录,复制一个my-xxx.cnf到/etc/my.cnf,并将/etc/my.cnf内的mysqld段,添加上default_character_set=utf8上后,就能解决这个问题了。不过,在mysql5.5上却不行了。此时,重启mysql,问题就来了。一直会报Starting MySQL…The server quit without updating PID file [失败]lib/mysql/localhost.localdomain.pid).异常。但是只要一去掉default_character_set=utf8这句后,就又能重新正常启动。好吧,我们打开启动日志,看下到底发生了什么事情了。
在my.cnf内添加以下代码输出err日志信息:
[safe_mysqld]
err-log = /var/log/mysqld.log
pid-file = /var/lib/mysql/localhost.localdomain.pid
在shell中输入/bin/sh /usr/bin/mysqld_safe & 启动mysql,shell输出如下:
110328 11:39:55 mysqld_safe Logging to ‘/var/lib/mysql/localhost.localdomain.err’.
110328 11:39:55 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
110328 11:39:57 mysqld_safe mysqld from pid file /var/lib/mysql/localhost.localdomain.pid ended
查看vi /var/lib/mysql/localhost.localdomain.err文件,终于发现了错误代码了,如下:
110328 11:26:57 [ERROR] /usr/sbin/mysqld: unknown variable ‘default_character_set=utf8’
110328 11:26:57 [ERROR] Aborting
难怪一加上default_character_set选项后,就无法启动,原来mysql5.5将这个参数给去掉了。
google一把,查看官方文档后,发现在新版本中,需要使用character_set_server来代替default_character_set参数。详细可以参考:http://dev.mysql.com/doc/refman/5.5/en/server-options.html#option_mysqld_default-character-set,仔细看下这个页面,会发现原来从mysql5.1后就已经作了修改了。
因此,你要是使用mysql5.1以上版本有乱码问题,不妨试试以上的方法。
在处理解决问题的过程中,google时,发现也有不少我同样的问题的,但是大部分都是mysql5.1以前的版本解决方法。若是使用的mysql5.1以上的新版本的TX,希望以上方法能解决您的问题。Good Luck。