最近重装了mysql,应用程序也修复了一些bug,然后应用程序出现了中文乱码问题。通过跟踪程序,在entity.save(obj)中,obj.title依然是正常的中文字符。最后,追踪到getHibernateTemplate().save(obj)。感觉程序应该没问题。应该是mysql出了问题。最后发现是mysql编码设置问题。这篇文章记录了修改编码的全过程。
本文最重要的一句:character_set_server=utf8 注意下划线_和-的区别。
测试环境:
centos 5.x
mysql 5.5
查看mysql版本mysql> select version();
+-----------+
| version() |
+-----------+
| 5.5.25a |
+-----------+
1 row in set (0.00 sec)查看mysql字符集:mysql> show variables like 'char%';
# /etc/init.d/mysqld stop
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
我们看到上面有几项字符集为latin1。下文主要介绍怎样修改mysql latin1编码为utf8编码。
首先,停掉mysql命令:# /etc/init.d/mysqld stop
找到mysql配置文件my.cnf 例如(/etc/my.cnf)
首先要记得备份。 备份命令:cp my.cnf my.cnfold
用vi编辑my.cnf
添加以下行到[mysqld]下面:
#collation-server=utf8_unicode_ci
#ini-connect='SET NAMES utf8'
character_set_server=utf8
上面我只使用了第3行,然后重启mysql问题就解决了。
重启mysql shell命令:# service mysqld start
重启如果失败,请将my.cnf还原后重启。
重启成功了!
再次查看数据库字符集,结果:
mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
如果你使用的不是mysql 5.5。
可能需要参考其他资源:
阅读(3196) | 评论(0) | 转发(0) |