最近在编写一个登录界面,连接到数据可的时候老是会出现中文乱码的问题,用中文登录就抛出异常:
java.sql.SQLException: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (gbk_chinese_ci,COERCIBLE) for operation '='
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2113)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2275)
at mypack.User.validateLogin(User.java:42)
at mypack.CheckLogin.doGet(CheckLogin.java:44)
at mypack.CheckLogin.doPost(CheckLogin.java:65)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:619)
但是用英文登录就没问题,之前我也用过很多方法,比如更改my.ini文件里的default-character-set=latin1-->  default-character-set=gbk;进入数据库更改设置:
set character_set_client =gbk; set character_set_connection =gbk; set character_set_database =gbk; set character_set_results =gbk; set character_set_server =gbk; SET collation_server = gbk_chinese_ci; SET collation_database = gbk_chinese_ci; SET collation_connection =gbk_chinese_ci;
可是都没得到解决,反而后来插入中文数据还报错:data too long for column 'username' at row 1 。
在原文件里连接数据库的代码和处理乱码的代码也没问题:
url="jdbc:mysql://localhost:3306/"+dbName+"user="+user+"&password="+password+"&useUnicode=true&characterEncoding=gbk"; 
request.setCharacterEncoding("gbk"); response.setContentType("text/html;charset=gbk");
改写的我也写了,该改的我也改了,可是最终还是得不到解决,弄得真郁闷!(我用的是MySql 5.0)请各路高手云集讨论啊!