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

Java 将中文字符串作为UTF-8插入MySQL LongBlob列,java,mysql,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

通过这样做:

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字符串可以看到汉字的hexa表示。然后,我继续这样做:

prepstmt.setObject(2, multipartMimeMsg );
但结果是???或以六边形表示的3F3F。它应该显示E4BDA0E5A5BDE59097我遗漏了什么吗?我已经将我的表格选项设置为字符集utf8,将排序规则设置为utf8\u general\u ci


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

我不确定
setObject()
是否能正确处理LOB-您是否用
setBytes()
setBinaryStream()尝试过这个方法

还有,为什么要将文本存储为
BLOB
而不是
text

String s = byteArrayToHexString(multipartMimeMsg.getBytes());
我假设multipartMimeMsg是一个字符串。仔细查看JavaDoc中的getBytes()方法,它将使用系统默认字符集(取决于您的操作系统)将字符串编码为字节,不同的系统可能会有所不同

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


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

它包含二进制数据,因为有png、jpeg等媒体,到目前为止,我在连接字符串的后面添加了?useUnicode=true&characterEncoding=UTF-8,似乎有效。需要验证。我明白了,我假设
multipartMimeMsg
是一个字符串。multipartMimeMsg是一个从字节转换而来的字符串。然后我又困惑了。如果
multipartMimeMsg
是一个字符串,为什么要将其存储在
BLOB
中?底层数据可能是二进制的,但它是MIME编码的,对吗?当你说转换自字节时,这些字节最初来自哪里?