将中文字符串作为UTF-8插入MySQL LongBlob列

时间:2011-07-26 02:54:08

标签: java mysql

通过这样做:

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,Collat​​ion为utf8_general_ci。

连接字符串是jdbc:mysql:// localhost:3306 / test

2 个答案:

答案 0 :(得分:0)

我不确定setObject()是否可以正确处理LOB - 您是否尝试使用setBytes()setBinaryStream()

此外,您将文字存储为BLOB而不是TEXT的原因是什么?

答案 1 :(得分:0)

String s = byteArrayToHexString(multipartMimeMsg.getBytes());

我假设multipartMimeMsg是一个字符串。仔细查看JavaDoc中的getBytes()方法,它将使用系统默认字符集(取决于您的操作系统)将字符串编码为字节,这可能因系统而异。

更准确的方法是设置你想要的确切字符集,比如aString.getBytes(“UTF-8”)。

对于列定义问题,我推荐使用“TEXT”类型,如@Dmitri所建议。