日期:2014-05-20  浏览次数:21012 次

异异异...异常来袭:java.sql.SQLException: Incorrect string value: '\xE3\x80\x90\xE9\x80\
在数据库中有一个表:message,有三个字段:
Field Type 
from varchar(20)
to varchar(20)
msg varchar(30)
现在从程序中向表中插入数据:
String from =msg.getFromUser().toString();
String message = msg.getMessage().toString();
Connection con = getConnection();
Statement st;
try {  
st =con.createStatement(); 
String sql = " select id,ip from user ";  
ResultSet rs=st.executeQuery(sql);  
while(rs.next())
{
String id = rs.getString(1);
String IP=rs.getString(2);  
  String to = id;
  String sql2 = "insert into message values ('"+from+"','"+to+"','"+message+"')";
  st.execute(sql2);
  }
  }catch(Exception e){e.printStackTrace();}

结果报错:
java.sql.SQLException: Incorrect string value: '\xE3\x80\x90\xE9\x80\x9A...' for column 'msg' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3170)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3099)
at com.mysql.jdbc.Statement.execute(Statement.java:695)
at Server.RequestProcessor.chat(RequestProcessor.java:303)
at Server.RequestProcessor.run(RequestProcessor.java:55)
at java.lang.Thread.run(Thread.java:662)

------解决方案--------------------
把你的message打印出来,看看是什么东西
------解决方案--------------------
你插入的数据中有中文吗?如果有可能是因为你的数据库字符编码不支持中文吧
------解决方案--------------------
编码问题。。。。。
------解决方案--------------------
打印一下组装后sql2的值.看看是什么值.估计是编码有点问题吧
------解决方案--------------------
编码不统一
------解决方案--------------------
编码 不统一
jdbc:mysql://127.0.0.1/SSH?characterEncoding=utf-8和数据库对应
------解决方案--------------------
你安装mysql的时候有个字符集选择的,如果那里不是utf-8,你在程序里面设置也没用,你不妨将那条语句在mysql控制台插入一下,如果能插入,那在程序里面应该没问题。自己要学会调试程序。如果在mysql控制台都插入有误,你可将mysql重新配置一下。
------解决方案--------------------
试试看,String sql2 = "insert into message values ('"+from+"','"+to+"',"+message+")";
插入varchar是不需要单引号的

------解决方案--------------------
还有,建议尽量不要用这种拼接式的插入语句,举例如果你message字符串里面有个单引号,肯定会出问题。还是用PreparedStatement吧。
如果message内容是It's my flower.那么拼出来的语句如下:
insert into message values ('Hello','World','It's my flower.')"
肯定会有错。
------解决方案--------------------
你可以把message的中文换成英文看看会不会报错,应该是中文编码问题