mysql 3.23.58 charset设置对blob字段操作的影响

mysql 3.23.58 charset设置对blob字段操作的影响
最近在“玩”hibernate Annotation,弄了个Attachment保存进数据库的测试,附件内容保存在content属性里面。
  @Lob
  @Column(columnDefinition 
=   " LongBlob " )
  
public   byte [] getContent() {
    
return  content;
  }
一开始,配置mysql jdbc url如下
jdbc.url             =     jdbc:mysql://localhost/test\
                            ?useUnicode
= true\
                            &characterEncoding
= gbk
一测试,报错
Caused by: java.sql.BatchUpdateException: Syntax error or access violation message from server:  " You have an error in your SQL syntax near ''D0CF11E0A1B11AE1000000000000000000000000000000003E000300FEFF0900060000000000000' at line 1 "
    at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:
1540 )
同样的语句,直接在mysql命令行下运行就没问题,偏偏jdbc上就有这臭毛病。换jdbc driver版本,改@Lob为 @Type(type = "org.springframework.orm.hibernate3.support.BlobByteArrayType"),改hibernate配置(比如hibernate.jdbc.use_streams_for_binary true),甚至是直接用jdbc来insert,乱七八糟折腾半天,问题照旧。最后只好用上“歪”招,把byte[]配成String,在保存的时候把byte[]保存成hex String格式,取的时候再解码回来。

歪招终归是歪招,这两天老为这东西心烦,晚上吃饭的时候无意中想起charset的问题,把代码捡回来再测试了一下,问题解决,哈哈!
jdbc.url             =     jdbc:mysql://localhost/mmwy_blog\
                            ?useUnicode
= true\
                            &characterEncoding
= utf- 8
如果设成iso-8859-1、utf-8,保存一点问题都没有,换用gbk、gb2312、big5之类的字符集,问题就出来了。

你可能感兴趣的:(mysql 3.23.58 charset设置对blob字段操作的影响)