IT人
相关图书

Jdbc 连接 mysql5.0 中文字符乱码问题

编辑: 文章来源: 发布日期:2007-2-6 人气:

为了用存储过程和触发器,我把我的mysql升级到了5.0的版本。
用mysql -u root -p -D db_name <c:\db_name.txt
将数据导入,
在命令窗口显示正常,
但当我再次用mysqldump -u root -p db_name >c:\db_name.txt
时,文本文件中的中文字符全是乱码,

在网上找了些资料,吧my.ini中的
两个
default-character-set=latin1
改为
default-character-set=gb2312
后,重新导入数据,
再导出,文本文件中文显示正常了。

但程序中的中文字符始终无法正常显示,
只是前者是乱码,后者全是问号。

后来我去mysql网上下了一个最新的jdbc驱动
重启服务器,程序中的中午字符显示正常,
但无法中文检索,
报错如下

exception 

javax.servlet.ServletException: javax.servlet.jsp.JspException: 
SELECT password,status,root FROM usr WHERE usr_name='匿名用户'
: Illegal mix of collations (gb2312_chinese_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:844)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
org.apache.jsp.validate.logcheck_jsp._jspService(org.apache.jsp.validate.logcheck_jsp:220)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause 

java.sql.SQLException: Illegal mix of collations (gb2312_chinese_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2901)
com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1584)
com.mysql.jdbc.Connection.serverPrepare(Connection.java:4932)
com.mysql.jdbc.Connection.prepareStatement(Connection.java:1312)
com.mysql.jdbc.Connection.prepareStatement(Connection.java:1284)
org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.doEndTag(QueryTagSupport.java:246)
org.apache.jsp.validate.logcheck_jsp._jspx_meth_sql_query_0(org.apache.jsp.validate.logcheck_jsp:312)
org.apache.jsp.validate.logcheck_jsp._jspService(org.apache.jsp.validate.logcheck_jsp:112)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

------------------------------
mysql现在是mysql-5.0.15-win32
操作系统是winxpsp2
web服务器是tomcat5.5.9
---------------------------------------------------------------
我的数据库连接本来是:
<!-- connect database begin -->
<sql:setDataSource driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/sh_ly_infosys?useUnicode=true&characterEncoding=GB18030"
user="root" password="browser"/>
<!-- connect database end   --> 
我把他改成了
<!-- connect database begin -->
<sql:setDataSource driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/sh_ly_infosys?useUnicode=true&characterEncoding=utf8"
user="root" password="browser"/>
<!-- connect database end   --> 
就好了,
插入的也正常了。
没有乱码。
用console select 出来也正常,
上面的连接字符串,我是在书上看来的,
characterEncoding=GB18030就是为了解决中文乱码,
当时针对的版本是4.0版的mysql,
刚才我发现
character_set_system 
始终是utf8
用set 提示read only
于是去查文档,发现
10.6. UTF8 for Metadata
Metadata is the data about the data. Anything that describes the database, as opposed to being the contents of the database, is metadata. Thus column names, database names, usernames, version names, and most of the string results from SHOW are metadata. 

Representation of metadata must satisfy these requirements: 

All metadata must be in the same character set. Otherwise, SHOW wouldn't work properly because different rows in the same column would be in different character sets. 

Metadata must include all characters in all languages. Otherwise, users wouldn't be able to name columns an

相关文章
    网友对“Jdbc 连接 mysql5.0 中文字符乱码问题”的评论
    已有位网友对本文发表评论,下面显示最近10条评论。 查看所有评论
    昵称:
    评论内容:
    Copyright ◎ 1998 - 2007 编程资料网 All Rights Reserved