问题描述
在对mysql数据库中插入数据的时候,直接插入中文是没有问题的!但是用预编译语句时,用流对数据进行处理总报incorrectstringvalue这个异常。问题原因应该是由于编码引起的,但是没有找到解决方法。以下是数据库编码设定:数据库itresource|CREATEDATABASE`itresource`/*!40100DEFAULTCHARACTERSETutf8数据库statusServercharacterset:utf8Dbcharacterset:utf8Clientcharacterset:utf8Conn.characterset:utf8建表语句:CREATETABLE`i__news`(`pk_i_newsid`int(10)NOTNULLAUTO_INCREMENT,`v_ntitle`varchar(80)CHARACTERSETutf8NOTNULL,`v_nifrom`varchar(80)CHARACTERSETutf8DEFAULTNULL,`v_nputdate`varchar(13)CHARACTERSETutf8NOTNULL,`v_nauthor`varchar(20)CHARACTERSETutf8NOTNULL,`v_ninfo`mediumtextCHARACTERSETutf8NOTNULL,`v_nftype`int(2)NOTNULL,`v_nfpath`varchar(80)CHARACTERSETutf8DEFAULTNULL,`v_orgname`varchar(80)CHARACTERSETutf8DEFAULTNULL,PRIMARYKEY(`pk_i_newsid`))ENGINE=InnoDBAUTO_INCREMENT=32DEFAULTCHARSET=utf8所有的编码方式都是utf8的以下是代码处理入库publicbooleannewsAlter(Stringntitle,Stringnifrom,Stringnputdate,Stringnauthor,Stringninfo,intnftype,Stringnfpath,Stringorgname,Stringtype){booleanb=false;dbcon=newDBConnection();Stringsql="";if("in".equals(type)){sql="insertintoi__news(v_ntitle,v_nifrom,v_nputdate,v_nauthor,v_ninfo,v_nftype,v_nfpath,v_orgname)values(?,?,?,?,?,?,?,?)";try{//byte[]cpic=ninfo.getBytes("latin1");byte[]cpic=ninfo.getBytes("utf-8");ByteArrayInputStreambaisss=newByteArrayInputStream(cpic);InputStreamReaderbais=newInputStreamReader(baisss,"utf-8");dbcon.prepareStatement(sql);dbcon.setString(1,ntitle);dbcon.setString(2,nifrom);dbcon.setString(3,nputdate);dbcon.setString(4,nauthor);dbcon.setCharacterStream(5,bais,cpic.length);dbcon.setInt(6,nftype);dbcon.setString(7,nfpath);dbcon.setString(8,orgname);System.out.println(sql);dbcon.executeUpdate();b=true;baisss.close();bais.close();dbcon.close();}catch(Exceptione){e.printStackTrace();}}elseif(type.equals("up")){}returnb;}如果编码方式设为utf-8就报异常,如果设为latin1则正常插入,但是入库的中文都是乱码。其余的字段中文都是正常入库的。急求帮,哪位大虾遇到过?如何解决的?
解决方案
解决方案二:
这里不要设置编码方式呢?因为你其他字段是中文,可见你的连接url里面已经指定了CharsetEncode=utf8。
解决方案三:
你创建数据库或者mysql使用的编码方式改为utf8
解决方案四:
引用2楼warison2008的回复:
你创建数据库或者mysql使用的编码方式改为utf8
创建数据库和表以及字段都是utf8编码的!
解决方案五:
引用1楼crazylaa的回复:
这里不要设置编码方式呢?因为你其他字段是中文,可见你的连接url里面已经指定了CharsetEncode=utf8。
好的我去试一下我是在main方法里写的测试直接传的中文。。。
解决方案六:
引用4楼ywsy0401的回复:
引用1楼crazylaa的回复:这里不要设置编码方式呢?因为你其他字段是中文,可见你的连接url里面已经指定了CharsetEncode=utf8。好的我去试一下我是在main方法里写的测试直接传的中文。。。
直接写个过滤器呢
解决方案七:
我也遇到了,烦死了,跟你一样的情况,都用BG2312可以
解决方案八:
引用1楼crazylaa的回复:
这里不要设置编码方式呢?因为你其他字段是中文,可见你的连接url里面已经指定了CharsetEncode=utf8。
有道理。
解决方案九:
引用2楼warison2008的回复:
你创建数据库或者mysql使用的编码方式改为utf8
正解!
解决方案十:
我也遇到了这个问题,是一个前辈帮我解决的。只要重新配置一下mysql服务就行,将编码方式改为utf-8就行了。
解决方案十一:
补充一下:mysql配置方法运行MySQLMySQLServer5.1binMySQLServerInstanceConfigWizard进行配置。
解决方案十二:
引用4楼ywsy0401的回复:
引用1楼crazylaa的回复:这里不要设置编码方式呢?因为你其他字段是中文,可见你的连接url里面已经指定了CharsetEncode=utf8。好的我去试一下我是在main方法里写的测试直接传的中文。。。
main方法测试的话,那么你的url里面有没有CharsetEncode=utf8?如果没有还是需要加上的。我的好像写错了,刚查了一个,不知道大小写有没有错。jdbcurl参考:jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false
解决方案十三:
引用11楼crazylaa的回复:
引用4楼ywsy0401的回复:引用1楼crazylaa的回复:这里不要设置编码方式呢?因为你其他字段是中文,可见你的连接url里面已经指定了CharsetEncode=utf8。好的我去试一下我是在main方法里写的测试直接传的中文。。。main方法测试的话,那么你的url里面有没有CharsetEncode=utf8?如果没有还是需要加上的。我的好像写错了,刚查了一个,不知道大小写有没有错。jdbcurl参考:jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false
DBurl=jdbc:mysql://localhost:3306/itresourceuseUnicode=true&characterEncoding=utf8用的是utf8依旧是那个错误。。。。无论流转为utf-8没有!
解决方案十四:
五笔圆角输入就有错。其它没错。字符集问题,至于怎么解决,我也没看懂,参见
解决方案十五:
该回复于2011-04-19 15:05:34被版主删除