Java连接MySQL中文乱码处理
原文出处:http://busybox.is-programmer.com/posts/23596.html
最近学习MySQL时又遇到了一个烦人的问题,中文编码,虽然在建立数据库时设置的字符编码为utf8,在MySQL的console上执行insert插入中文时没问题,可是在java代码中插入中文到mysql中就是??了,就是代码中的realName
/************************************************************
* Add resident
************************************************************
*/
public boolean addResident(String userID,String realName,String gender,
String birth,String addr,String tel,String email,String checkin) {
Connection conn = this.getConnection();
CallableStatement stmt = null;
Date birthDate = null;
Date checkinDate = null;
if(birth!=null && (!birth.equals(""))) {
birthDate = Date.valueOf(birth);
}
if(checkin!=null && (!checkin.equals(""))) {
checkinDate = Date.valueOf(checkin);
}
try {
stmt = conn.prepareCall("{call ICommunity.addResident(?,?,?,?,?,?,?,?,?)}");
stmt.setString(1, userID);
stmt.setString(2, realName);
stmt.setString(3, gender);
stmt.setDate(4, birthDate);
stmt.setString(5, addr);
stmt.setString(6, tel);
stmt.setString(7, email);
stmt.setDate(8, checkinDate);
stmt.registerOutParameter(9, Types.BOOLEAN);
stmt.execute();
return stmt.getBoolean(9);
}catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
finally {
try {
conn.close();
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
差了好多资料,可还是没有解决根本问题,不管在代码里怎么改变字符编码,到数据库中显示的还是乱码
最后一篇很给力的文章解决了问题:http://developer.51cto.com/art/200906/130425.htm,需要设置一下mysql的配置文件中的client和server的默认编码。
在linux下这个配置文件在/etc/mysql/my.cnf,编辑之后的文件内容为:
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
default-character-set=utf8
# Here is entries for some specific programs
# The following values assume you have at least 32M ram
# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
#
# * Basic Settings
#
default-character-set=utf8
就是分别在[client]和[mysqld]下添加设置默认编码的语句。
然后重启mysql,sudo /etc/init.d/mysql restart
结果就正常了。。。
还有一篇介绍字符编码的文章也很给力:http://www.regexlab.com/zh/encoding.htm