MySql中插入中文报错:incorrect string value

问题描述

在对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被版主删除

时间: 2024-10-01 23:10:14

MySql中插入中文报错:incorrect string value的相关文章

通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0...

原文:[原创]通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 'incorrect string value: '\xF0... 这篇blog重点在解决问题,如果你对字符编码并不是特别了解,建议先看看 < [原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 >. 当然,如果只是针对解决这个Mysql插入报错问题,本篇足够了.   一.定位错误   定位错误绝对是至关重要的一环.我建议遇到问题耐心分析一下比较好,毕竟"不是所有的牛奶都叫特仑苏

数据库插入-向mysql中插入数据时报错,错误提示如下,代码如下

问题描述 向mysql中插入数据时报错,错误提示如下,代码如下 com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'like,note) values (?,?,?,?,?,?

mysql-node.js解析input中文报错

问题描述 node.js解析input中文报错 通过nodejs将html页面中的表单内容插入mysql数据库.当input文本框内输入的为英文或数字时完全正确,一旦输入中文,点击提交按钮,服务端显示错误""Incorrect String Value--'现在检查,数据库所有的字符设置都已经为utf8.nodejs代码中也有req.setEncoding('utf8').表单form标签中也有accept-charset=""UTF-8"".n

java-用MySql插入图片报错!!r如何解决

问题描述 用MySql插入图片报错!!r如何解决 String sql="insert into image(tupian) values(?)"; Connection conn=null; PreparedStatement ps=null; try { conn=getConnection(); ps=(PreparedStatement) conn.prepareStatement(sql); ps.setBinaryStream(1, Thread.currentThread

项目从mysql迁移到oracle报错

问题描述 项目从mysql迁移到oracle报错 本来没有一点错误,迁移之后出现了很多,不知道哪位大神见过下面的问题: 17:23:54,967 ERROR BasicPropertyAccessor:118 - IllegalArgumentException in class: com.ebupt.dataWarehouse.entity.dataQualityMonitoring.MonTaskConEntity, setter method of property: TemporaryI

java-向mysql数据库中插入数据时报错

问题描述 向mysql数据库中插入数据时报错 public class categorydao { public static void save(category c) throws SQLException{ Connection conn=(Connection) DB.getConnection(); String sql=null; if(c.getId()==-1){ sql="insert into category values(null,?,?,?,?,?)"; }e

android中sqlite一直报错

问题描述 android中sqlite一直报错 在应用中用到sqlite,创建了一些表,代码如下: db.execSQL("CREATE TABLE IF NOT EXISTS " + GAMES_HISTORY_TABLE+ " (" + GAME_KEY + " INTEGER PRIMARY KEY AUTOINCREMENT, " + RIGHT_DRILLS + "INTEGER NOT NULL, " + NUM_

android中应用编译报错

问题描述 android中应用编译报错 一个带下拉列表的应用,在编译的时候报错: The constructor ArrayAdapter(LayoutNext, int, String[]) is undefined 不知道应该怎么解决? 我的实现代码: public class LayoutNext extends Fragment implements OnClickListener,OnItemSelectedListener{ TimePicker timepicker; privat

mysql view 视图表-mysql中插入数据的问题,在线等

问题描述 mysql中插入数据的问题,在线等 mysql中怎样向视图表中插入数据,或者是一条sql语句同时插入数据到多张物理表中,怎样实现,在线等?! 解决方案 视图插入数据是有一定的限制的,比如说有些视图带有sum/count的就不能从视图插入一条sql语句同时插入数据到多张物理表,这个可以用存储过程或触发器来做 解决方案二: MySql插入数据,中文乱码问题MySQL数据插入问题Mysql的longblob字段插入数据问题