mysql数据库编码转换小记

来源:互联网 发布:扫描软件哪个好 编辑:程序博客网 时间:2024/04/29 04:07

环境:

     实际项目应用中,有时会一个项目使用多个数据库,可能数据库设计之初两处设计不周,使得两个数据库字符集不一样,可能一个会使用默认的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文件就好了。

实际转换过程中可能会出现乱码情况,这时可能就是是导入时编码的问题了,个人认为删去数据库,重新建立一个数据库和导入改变编码后的数据。

原创粉丝点击