环境:
实际项目应用中,有时会一个项目使用多个数据库,可能数据库设计之初两处设计不周,使得两个数据库字符集不一样,可能一个会使用默认的Latin1西文编码,使得你创建的表,及表中数据在连接层都是以Latin1编码;而另外一处数据库使用UTF-8编码。
这样在开发中,我们操作不同数据库表时,将要对sql语句中传入得参数做必要的修改,否则将会操作失误。
比如:一般的网站中,我们通过Request得到的参数数据信息为UTF-8页面编码,故在执行这样的sql语句时要进行转码操作:
/**
* 将页面编码的数据转为数据库编码的数据
*
* @param 欲转码的字符串
* @return 转码后的字符串
*/
public static String PageToDb(String PageString) {
try {
if (null == PageString) {
return "";
} else {
if (dbEncoding.equals(pageEncoding)) {
return PageString;
}
return new String(PageString.getBytes(pageEncoding), dbEncoding);
}
} catch (UnsupportedEncodingException e) {
return "";
}
}
上面传人的参数为要转换的字符串,
sql ="update sys_student_test set studentname='"+PageToDb(studentname)+"',studentbir='"+PageToDb(studentbir)+"',studentsex='"+PageToDb(studentsex)+"' where studentid='"+studentid+"'";
具体的pageEncoding 和dbEncoding可以带参数或固定设置好。比如数据库为Latin1编码的要使dbEncoding="ISO-8859-1";
在实际开发中,我们也会遇到统一两个数据库,对数据库默认字符集编码改为UTF-8,应为当前已经有数据在数据库中,所以先将数据表结构和数据都导出来,而后将所有表下面的DEFAULT CHARSET=latin1;改为DEFAULT CHARSET=utf8;然后将该文件另存为UTF-8保持,重新改变数据库编码为UTF-8,运行修改后的sql文件就好了。
实际转换过程中可能会出现乱码情况,这时可能就是是导入时编码的问题了,个人认为删去数据库,重新建立一个数据库和导入改变编码后的数据。