现在的项目数据库使用的是mysql,在window开发环境和linux生产环境都出现过乱码问题,下面主要总结下本人碰到的几次乱码问题:
1、win7下开发环境数据库乱码问题
在window下安装mysql时候,有一个步骤可以选在默认字符集,软件默认的是latin1,
若现在开发的项目是UTF-8,那么安装软件时候最好将此项设置为utf-8
由于是开发环境,我们也可以很方便的修改数据库字符集(由于本人项目工程字符集市UTF-8,所以下面均以UTF-8为例说明)
执行下面两个命令,查看数据库字符集
SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation_%';
若字符集不是UTF-8,则执行命令修改:SET character_set_client = utf8 ; (character_set_client 为mysql参数,修改所有不是utf8的参数)
具体的可参考文章:http://www.blogjava.net/wldandan/archive/2007/09/04/142669.html
本地J2EE项目在连接mysql时候,在配置tomcat时候,修改conf/context.xml
(注意url中加 ?useUnicode=true&characterEncoding=utf-8 )
<Resource
validationQuery = "SELECT 1"
testWhileIdle = "true"
testOnBorrow = "true"
name="jdbc/mydb"
auth="Container"
type="javax.sql.DataSource"
driverClassName="org.gjt.mm.mysql.Driver"
url="jdbc:mysql://192.168.19.23:3306/test?useUnicode=true&characterEncoding=utf-8"
username="root"
password="passwd"
maxActive="100"
maxIdle="30"
maxWait="10000"
/>
2、linux下数据库乱码问题
由于是生产环境,且数据库下面已经有投产的项目的实例,所以运维人员不敢轻易更改数据库字符集参数(不评论运维的工作,呵呵。。。)
下面说明linux服务器mysql数据库的参数,参数值大多为latin1。
在新建数据库实例、表的时候都指定是utf-8,执行完建表语句和初始化sql后,数据库存储的是中文,前台web界面展示的是乱码;
web界面向数据库插入数据,数据库存储的是乱码,前台web界面显示的是中文
(项目的数据库连接处指定了编码格式,所以存取能正常对应上,即为把中文存入数据库,去除的仍然是中文)
解决方式:
在链接mysql数据库的时候,指定默认的字符集
然后再使用source命了执行sql文件,此时前台界面显示的就是中文了
此处需要特别注意:
sql文件的编码格式也要与项目的编码格式一致(UTF-8),否则插入数据库的还是乱码