mysql 插入繁体字报错

mekain 发布于 2013/11/30 12:15
阅读 1K+
收藏 0

@jfinal程序插入繁体字mysql的时候报错,数据库设置了utf8,但是依然报错,数据库,表,字段,都设置了utf8。请问大家有什么办法吗



2013-11-30 12:05:18

[ERROR]-[Thread: qtp28899428-18]-[com.jfinal.core.ActionHandler.handle()]: /hotel/2
com.jfinal.plugin.activerecord.ActiveRecordException: java.sql.SQLException: Incorrect string value: '\xF0\xA6\x8D\x8B\xE5\xA4...' for column 'name' at row 1
at com.jfinal.plugin.activerecord.Model.save(Model.java:305)
at com.demo.hotel.HotelController.read(HotelController.java:125)
at com.demo.hotel.HotelController.index(HotelController.java:56)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.jfinal.core.ActionInvocation.invoke(ActionInvocation.java:55)
at com.jfinal.core.ActionHandler.handle(ActionHandler.java:73)
at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:72)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:453)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:560)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
at org.eclipse.jetty.server.Server.handle(Server.java:365)
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485)
at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926)
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:628)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.sql.SQLException: Incorrect string value: '\xF0\xA6\x8D\x8B\xE5\xA4...' for column 'name' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2683)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2144)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2444)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2362)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2347)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
at com.jfinal.plugin.activerecord.Model.save(Model.java:299)
... 32 more

加载中
0
巴顿
巴顿

遇到过你这样的问题,Incorrect string value: '\xF0\xA6\x8D\x8B\xE5\xA4...' for column 'name' at row 1

你要先确定你在servlet里面或者action或者其他的应用程序里面获取到的字符串不是乱码。

检查下你插入数据库之前的数据是否是乱码了。

0
Jackin
Jackin
如果可以 你可以在数据库连接完时执行 SET NAMES 'utf8'; 这个语句。这样只要你的程序向MySQL提交utf8编码的数据时,就不会出这样的错误了。请先保证你程序接收到的数据是UTF8编码的!
0
JFinal
JFinal
jdbcurl中指定编码没?详见jfinal demo项目
0
mekain
mekain

引用来自“巴顿”的答案

遇到过你这样的问题,Incorrect string value: '\xF0\xA6\x8D\x8B\xE5\xA4...' for column 'name' at row 1

你要先确定你在servlet里面或者action或者其他的应用程序里面获取到的字符串不是乱码。

检查下你插入数据库之前的数据是否是乱码了。

File csv = new File("E:\\TDDownload\\2000W\\200W-400W.csv"); // CSV文件

BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(csv),"UTF-8"));  
// 读取直到最后一行
String line = "";

while ((line = br.readLine()) != null) {

}

巴顿
巴顿
你是从文件读取繁体字出来对吧?然后读取出来的是乱码,所以插进数据库才会出错。那么问题就和Jfinal没关系,和数据库也没关系了,你需要解决的就是读取输入流中文乱码的问题了。这个我很少做,你自己可以百度,google下去解决。
0
mekain
mekain

引用来自“JFinal”的答案

jdbcurl中指定编码没?详见jfinal demo项目
设置了,设置了utf8,还没有插入数据库前,我看到就乱码了,但是我设置了utf-8还是乱码
0
巴顿
巴顿

引用来自“mekain”的答案

引用来自“巴顿”的答案

遇到过你这样的问题,Incorrect string value: '\xF0\xA6\x8D\x8B\xE5\xA4...' for column 'name' at row 1

你要先确定你在servlet里面或者action或者其他的应用程序里面获取到的字符串不是乱码。

检查下你插入数据库之前的数据是否是乱码了。

File csv = new File("E:\\TDDownload\\2000W\\200W-400W.csv"); // CSV文件

BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(csv),"UTF-8"));  
// 读取直到最后一行
String line = "";

while ((line = br.readLine()) != null) {

}

楼主,刚刚查了下说csv默认编码是ANSI,你这里应该将UTF-8改为GBK.我自己建了一个test.txt文件,然后用你的方法读取,结果也发现乱码,后来我才知道txt文件默认是ANSI编码的,你用EditPlus另存的时候会发现可以另存为UTF-8形式,这样你用UTF-8去解码就正确了,给你个链接http://blog.csdn.net/jeamking/article/details/5674870
0
fengyqf
fengyqf
连接数据库后,先执行 set names utf8 (或者你用的其它字符集),再执行其它sql查询。
0
laojiadingxi
laojiadingxi
cmd 命令行窗口的编码为gbk,所以你要么把数据库设置成gbk,要么将cmd窗口改成utf8
返回顶部
顶部