MySQL 中文显示乱码~~~
最近学习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(); } } }
差了好多资料,可还是没有解决根本问题,不管在代码里怎么改变字符编码,到数据库中显示的还是乱码
String name = null; try { //name = realName.getBytes("UTF-8").toString(); name = new String(realName.getBytes("iso_8859_1"),"utf8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block System.out.println("Exception "+e.getMessage()); }
最后一篇很给力的文章解决了问题: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