在对mysql数据库中插入数据的时候,直接插入中文是没有问题的!但是用预编译语句时,用流对数据进行处理总报incorrect string value这个异常。问题原因应该是由于编码引起的,但是没有找到解决方法。 以下是数据库编码设定: 
数据库 
itresource | CREATE DATABASE `itresource` /*!40100 DEFAULT CHARACTER SET utf8 
数据库 status 
Server characterset:    utf8 
Db    characterset:    utf8 
Client characterset:    utf8 
Conn.  characterset:    utf8 
建表语句: 
CREATE TABLE `i__news` ( 
  `pk_i_newsid` int(10) NOT NULL AUTO_INCREMENT, 
  `v_ntitle` varchar(80) CHARACTER SET utf8 NOT NULL, 
  `v_nifrom` varchar(80) CHARACTER SET utf8 DEFAULT NULL, 
  `v_nputdate` varchar(13) CHARACTER SET utf8 NOT NULL, 
  `v_nauthor` varchar(20) CHARACTER SET utf8 NOT NULL, 
  `v_ninfo` mediumtext CHARACTER SET utf8 NOT NULL, 
  `v_nftype` int(2) NOT NULL, 
  `v_nfpath` varchar(80) CHARACTER SET utf8 DEFAULT NULL, 
  `v_orgname` varchar(80) CHARACTER SET utf8 DEFAULT NULL, 
  PRIMARY KEY (`pk_i_newsid`) 
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8 所有的编码方式都是utf8的 
以下是代码处理入库 
public boolean newsAlter(String ntitle,String nifrom,String nputdate,String nauthor,String ninfo,int nftype,String nfpath,String orgname,String type){ 
boolean b = false; 
dbcon = new DBConnection(); 
String sql = ""; 
if ("in".equals(type)) { 
sql = "insert into i__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"); 
ByteArrayInputStream baisss = new ByteArrayInputStream(cpic); 
InputStreamReader bais = new InputStreamReader(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 (Exception e) { 
e.printStackTrace(); 

} else if (type.equals("up")) { 

return b; 

如果编码方式设为utf-8就报异常,如果设为latin1则正常插入,但是入库的中文都是乱码。其余的字段中文都是正常入库的。 急 求帮,哪位大虾遇到过?如何解决的?

解决方案 »

  1.   

    这里不要设置编码方式呢?因为你其他字段是中文,可见你的连接url里面已经指定了CharsetEncode=utf8。
      

  2.   

    你创建数据库或者mysql使用的编码方式改为utf8
      

  3.   

    创建数据库和表以及字段都是utf8编码的!
      

  4.   

    好的 我去试一下 我是在main方法里写的测试直接传的中文
      

  5.   

    我也遇到了这个问题,是一个前辈帮我解决的。
    只要重新配置一下mysql服务就行,将编码方式改为utf-8就行了。
      

  6.   

    补充一下:mysql配置方法运行\MySQL\MySQL Server 5.1\bin\MySQL Server Instance Config Wizard进行配置。
      

  7.   

    main方法测试的话,那么你的url里面有没有CharsetEncode=utf8?如果没有还是需要加上的。我的好像写错了,刚查了一个,不知道大小写有没有错。
    jdbc url参考:jdbc:mysql://localhost:3306/test?user=root&password=& useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false
      

  8.   


    DBurl=jdbc\:mysql\://localhost\:3306/itresourceuseUnicode\=true&characterEncoding\=utf8 用的是utf8依旧是那个错误。 无论流转为utf-8没有!
      

  9.   

    五笔圆角输入就有错。其它没错。字符集问题,至于怎么解决,我也没看懂,参见http://tech.ddvip.com/2008-09/122068642261307.html