异常之:java.sql.SQLException: Incorrect string value: '\xD3\xC3JDBC...' for column 'resume' at row 1

java.sql.SQLException: Incorrect string value: '\xD3\xC3JDBC...' for column 'resume' at row 1
 

产生这种异常的原因在于,mysql中的utf8编码最多会用3个字节存储一个字符,如果一个字符的utf8编码占用4个字节(最常见的就是ios中的emoji表情字符),那么在写入数据库时就会报错。 mysql从5.5.3版本开始,才支持4字节的utf8编码,编码名称为utf8mb4(mb4的意思是max bytes 4),这种编码方式最多用4个字节存储一个字符。

1-可以把MySQL的编码改成 utf8mb4。然后进行简单的配置。解决Connection连接对象的编码问题。如下:
conn.createStatement().execute("SET names 'utf8mb4'");
2-可以改下使用的方法,用setCharacterStream()这个方法就可以。
以下是API中 setCharacterStream()方法,读取字符数
而这个是 setAsciiStream()方法,读取字节数
public void ClobUpdate() throws Exception {
		Connection conn =JDBCUtil.getConnection();
		String sql = "insert into t_clob(resume) values(?)";
		PreparedStatement pstmt  = conn.prepareStatement(sql);
		File file = new File("notes.txt");
		InputStream in = new FileInputStream(file);
		//Reader r = new FileReader(file);
		pstmt.setAsciiStream(1, in,file.length());
		//pstmt.setCharacterStream(1, r,(int)file.length());
		pstmt.executeUpdate();
		JDBCUtil.ReleaseSource(null, pstmt, conn);
	}

以下是进行修改后的:
public void ClobUpdate() throws Exception {
		Connection conn =JDBCUtil.getConnection();
		String sql = "insert into t_clob(resume) values(?)";
		PreparedStatement pstmt  = conn.prepareStatement(sql);
		File file = new File("notes.txt");
		//InputStream in = new FileInputStream(file);
		Reader r = new FileReader(file);
		//pstmt.setAsciiStream(1, in,file.length());
		pstmt.setCharacterStream(1, r,(int)file.length());
		pstmt.executeUpdate();
		JDBCUtil.ReleaseSource(null, pstmt, conn);
	}
因为自己可能理解的不是太深刻,但是通过写博客给了自己一种动力去多考虑一些。有没有人看到不重要,但是这里记录着我成长的点滴,珍惜也感恩这个平台,希望以后写的博客越来越有水平。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值