mysql数据库编码转换小记

当项目涉及多个数据库,且编码不一致时,如一个使用Latin1,另一个使用UTF-8,会造成操作困难。通常需要对SQL参数进行转码,例如在处理UTF-8数据时,确保数据库连接的编码为ISO-8859-1。若要统一编码,可导出数据,修改表结构的字符集为UTF-8,再导入并创建新数据库。如果出现乱码,可能需要重新创建数据库并导入转换后的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值