Hibernate2在mysql4.1.7中执行查询出错的一种情况

类别:Java 点击:0 评论:0 推荐:
最近将mysql的版本升级成4.1.7。但是在利用hibernate2对数据库进行查询时报以下错误(插入更新操作正常):
09:42:05,248 ERROR JDBCExceptionReporter:46 - General error message from server: "Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='"
09:42:05,248  WARN JDBCExceptionReporter:38 - SQL Error: 1267, SQLState: S1000
09:42:05,248 ERROR JDBCExceptionReporter:46 - General error message from server: "Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='"
09:42:05,264 ERROR JDBCExceptionReporter:38 - Could not execute query
java.sql.SQLException: General error message from server: "Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='"
 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1997)
 at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1167)
 at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1278)
 at com.mysql.jdbc.Connection.execSQL(Connection.java:2247)
 at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1586)
 at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:92)
 at net.sf.hibernate.impl.BatcherImpl.getResultSet(BatcherImpl.java:87)
 at net.sf.hibernate.loader.Loader.getResultSet(Loader.java:795)
 at net.sf.hibernate.loader.Loader.doQuery(Loader.java:189)
 at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:133)
 at net.sf.hibernate.loader.Loader.doList(Loader.java:950)
 at net.sf.hibernate.loader.Loader.list(Loader.java:941)
 at net.sf.hibernate.hql.QueryTranslator.list(QueryTranslator.java:834)
 at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1512)
 at net.sf.hibernate.impl.QueryImpl.list(QueryImpl.java:39)
 at org.apache.jsp.test2_jsp._jspService(test2_jsp.java:88)
 at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
 at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
 at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
 at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
 at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
 at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
 at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
 at java.lang.Thread.run(Thread.java:534)


仔细分析上面红色字,感觉到应该是字符集出错了。所以在创建表的时候指定字符集(我在xml文件中指定的是utf8,所以表也应该指定为utf8),创建表的格式如下
CREATE TABLE `table_name`
(
 ******)
ENGINE=InnoDB DEFAULT CHARSET=utf8

本文地址:http://com.8s8s.com/it/it13185.htm