通过这样做:
File file1 = new File("/usr/local/test/multipartMimeMsg.txt");
FileOutputStream fos1 = new FileOutputStream(file1);
String s = byteArrayToHexString(multipartMimeMsg.getBytes());
fos1.write(s.getBytes(), 0, s.getBytes().length);
我验证了我的multipartMimeMsg字符串可以看到中文字符的六边形表示。然后我继续这样做:
prepstmt.setObject(2, multipartMimeMsg );
但它变成了???或以hexa表示的3F3F3F。它应该显示E4BDA0E5A5BDE59097我错过了什么?我已将表格选项设置为Charset utf8,Collation为utf8_general_ci。
连接字符串是jdbc:mysql:// localhost:3306 / test
答案 0 :(得分:0)
我不确定setObject()
是否可以正确处理LOB - 您是否尝试使用setBytes()
或setBinaryStream()
?
此外,您将文字存储为BLOB
而不是TEXT
的原因是什么?
答案 1 :(得分:0)
String s = byteArrayToHexString(multipartMimeMsg.getBytes());
我假设multipartMimeMsg是一个字符串。仔细查看JavaDoc中的getBytes()方法,它将使用系统默认字符集(取决于您的操作系统)将字符串编码为字节,这可能因系统而异。
更准确的方法是设置你想要的确切字符集,比如aString.getBytes(“UTF-8”)。
对于列定义问题,我推荐使用“TEXT”类型,如@Dmitri所建议。