在用Eclipse开发Web项目时,遇到了中文乱码的问题 ,经过同事的耐心帮助、网上资料的查询和自己的分析,终于解决了。
问题解决给我带来的心得是:关键是要确定问题是出在了哪个环节。
造成中文乱码的原因可能Eclipse开发环境中,也可能是出在了Hibernate存取数据时,也有可能是数据库的系统编码问题。
如果是Eclipse的问题,那就对以下各项进行设置,即可排除问题。
设置eclipse相关编码为UTF-8:
修改工作区默认编码,位置:windows--perferences--general--workspace
修改JSP文件默认编码,位置:windows--perferences--web--jsp files
修改JSP文件默认编码,位置:windows--perferences--general--content types--text--jsp file
修改配置文件默认编码:位置:windows--perferences--general--content types--text--java properties file
设置自动格式化代码:选中format source code--format all lines,位置:windows--perferences--java--editor--save actions
如果是问题是在Hibernate读写数据时,
要对hibernate连接数据库的xml配置文件添加两项:
<property name="connection.useUnicode">true</property>
<property name="connection.characterEncoding">utf8</property>
或者对连接的url增加参数,如下:
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
</property>
问题也可能是数据库的事,我这次都是因为MySQL的系统编码不对造成的。
网上说MySQL默认的字符集不是utf8,而是latin2,它是在C:\Program Files\MySQL\MySQL Server 5.1下的my.ini文件中体现的,我们可以对其修改,将两处default-character-se的值改为utf8即可(注意不是utf-8)。改后,重启一下MySQL的服务,在开始菜单的MySQL命令行客户端(MySQL command Line client)输入
SHOW VARIABLES LIKE '%character_set_%'
如果显示
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, E:softProgrammysqlmysql-5.0.22-win32sharecharsets
则表示修改默认字符集为utf8成功
实在很感谢csdn里一位兄台的文章:http://blog.csdn.net/qking93415981/article/details/1753248
附带一篇好文章 《 Java字符编码知识简介》 :http://tolywang.itpub.net/post/48/465103
其实这两个地方弄好了,未必就能插入中文,
还要在创建数据库的时候 指定 default charset=gbk
创建表的时候最好也加上。
create table data(
id int primary key auto_increment,
sid varchar(256) not null,
name varchar(256) not null,
longitude decimal(10,6) not null,
latitude decimal(9,6) not null,
jam_level integer(1) not null,
description text,
insert_time timestamp not null,
update_time timestamp not null
)default charset=gbk
按以上操作后,中文可以插入mysql数据库中了(最好此时重启下mysql服务:net stop mysql,net start mysql)。
解决ubuntu下修改my.cnf设置字符集导致mysql无法启动
旸仔 2013-02-26 数据库 MySQL在Ubuntu下安装了MySQL数据库,为了便于使用,欲将字符集统一设置为utf8,而不是默认的latin1。
进入mysql,输入show variables like 'character%';
查看当前字符集编码情况,显示如下:
+--------------------------+----------------------------+ | 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 | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
在网上查询到以下解决办法方法:
找到[client] 添加:
default-character-set=utf8
找到[mysqld] 添加:
default-character-set=utf8
init_connect=’SET NAMES utf8′
然后重启mysql服务。
可是我根据这样修改后启动mysql服务报错,启动不了。在网上试了多种解决办法,最后找到一个方法,可以解决,如下:
其他的还跟上面一样,只有在[mysqld]下面添加的
default-character-set=utf8
改为:
character-set-server=utf8
输入命令sudo service mysql restart
重新启动mysql,启动成功!再查看编码为:
+--------------------------+----------------------------+ | 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/ | +--------------------------+----------------------------+
问题解决,表中中文数据不再乱码。
提示:my.cnf文件通常位于 /etc/mysql/ 或 /etc/ 下,可能因安装版本或系统而异