JSP网页里是charset=UTF-8,Mysql5的数据库也设成了UTF-8,可为啥通过JSP网页存取数据库,中文还是乱码?

sunsys Engineer  2007-08-10 12:22:49
JSP网页里是charset=UTF-8:
<%@ page contentType="text/html; charset=UTF-8" language="java" import="java.sql.*" errorPage="error.jsp" %>

Mysql5的数据库也设成了UTF-8,可为啥通过JSP网页存取数据库,中文还是乱码?
...全文
813 点赞 收藏 29
写回复
29 条回复
seashell126 2011年12月11日
我也遇到了同样的乱码问题,求高人解答
回复 点赞
LL223851 2007年10月09日
.net2.0+Mysql需要在连接字符串也加上"character set=utf8"可以解决乱码问题,
你在jsp里面试一下看看能否解决
回复 点赞
colinmok 2007年09月26日
我是用hiberante操作数据的,能不能像如下操作??
String hql="set names utf8;update SoundChatRight set nickname='你死我活' where id=:id ";


tx = session.beginTransaction();
Query query = session.createQuery(hql);
query.setInteger("id",id);
query.executeUpdate();
session.close();
还是要分开操作??
回复 点赞
z109876543210 2007年09月26日
回复人:yueliangdao0608((深圳PHPER,MSN:yueliangdao0608@gmail.com)) ( 一星(中级)) 信誉:98 2007-8-10 13:33:53 得分:0
?

在所有语句前加上:set names utf8


连接成功后执行一次就行了
回复 点赞
colinmok 2007年09月26日
兄弟们,我也遇到这种情况,我用的是
数据库:MySql5.01
Web容器:Tomcat5.5
开发工具:MyEclipse5.5
构架:Struts1.2+Hibernate3.1+XHTML
--------------
配置情况:
(1).已加入过滤器com.util.SetCharacterEncodingFilter
web.xml配置如下<!--中文编码过滤器-->
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>com.util.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<servlet-name>action</servlet-name><!-- 过滤所有的action类 -->
</filter-mapping>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern><!-- 过滤所有的jsp页面 -->
</filter-mapping>
(2).连接数据时已经设置了
jdbc:mysql://127.0.0.1:3306/YDKT?useUnicode=true&characterEncoding=UTF-8
(3).jsp页面也设置了
<?xml version="1.0" encoding="utf-8"?>
<%@ page contentType="text/html; charset=utf-8" language="java"%>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>
信息
</title>
</head>
(4).Struts控制器取表单数前也设置了
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");

####但问题出现了????????????????########
新增数据时取到的中文一切正常,入库也正常,显示到页面上也正常,当点击修改时明明取到的中文不是乱码,Tomcat控制台打印出来的也是正常的中文也是正常的(如:name====你死我活
修改hql====update SoundChatRight set nickname='你死我活' where id=:id),入库后却是乱码,显示到页面上的也是乱码,搞了两天还没有搞定.真是郁闷!!兄弟们,救救我吧.急呀.
回复 点赞
ruanchao 2007年09月26日
mysql_query("SET NAMES 'UTF8'");
须重启mysql,否则无效的。
=========================
不知道行不行
回复 点赞
懒得去死 2007年09月26日
http://blog.chinaunix.net/u/29134/showart_390526.html
回复 点赞
whalefish2001 2007年09月26日
在运行sql语句前,先要运行
mysql_query("SET NAMES 'utf8'",$link);
回复 点赞
懒得去死 2007年08月24日
好好检查你的几个页面间编码的转换。只有一个页面的编码不一致就会导致乱码。
回复 点赞
jerrycool 2007年08月23日
存和取都乱码?
入库前System.out.print一下看看...
取出后,也print看看是否正常.

楼上说得是,先确定哪个环节乱码了?
是客户端到web容器?web容器到数据库?
回复 点赞
Tirecoed 2007年08月23日
总结一下楼上各位的。
jsp我不懂,给点建议。我在php下也遇到过一次乱码,加上类似
<%@page language="java" pageEncoding="UTF-8" errorPage="error.jsp"%>
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
的代码之后消除。
要确定是哪个坏节乱码。数据通过应用程序存入数据库,再从中取出交给应用程序的每一个环节进行检查。
1. 网页自身文本以utf8存储
2. 网页head标出utf8
3. 就是上面的那段
4. mysql以utf8存储。
5. 以utf8从数据库读取
6. 确保存入与取出相同的过程中编码相同,这样即使数据库中是乱码的,显示出来也会是正常的。
7. 你用的接口对utf8支持不好。
回复 点赞
sunsys 2007年08月23日
主要是存乱码;
取还好,
如果Mysql里有中文, 读出还是中文。
只是通过JSP 网页输入中文,存入mysql5 就成乱码了。

现在修改后也能存入mysql5是中文,不再乱码了, 但大多时报错
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'ItemName' at row 1

回复 点赞
jerrycool 2007年08月22日
LZ用过滤器!(代码搜索多的是)
jsp页面本身也用utf8编码!
回复 点赞
sunsys 2007年08月21日
ItemName字段不是主键,
而且有时好几个相同的中文字都可以存入。
回复 点赞
yuer1985 2007年08月21日
你的ItemName字段是主键不?
是的话那它的最大储存是不大于255
回复 点赞
sunsys 2007年08月21日
极少时也能存入2个不同中文字,有时1个中文字也存不入。 反正就是极不稳定, 大多时候报错
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'ItemName' at row 1

我现在是 Netbeans6+Tomcat6.0.13+Mysql5
回复 点赞
sunsys 2007年08月21日
各位老大, 我加了
<%@page language="java" pageEncoding="UTF-8" errorPage="error.jsp"%>

response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");

Worker.java的doUpdate函数里加了
Statement s = null;
s = con.createStatement();

s.executeUpdate("set names utf8");

s.executeUpdate(sql);

/////
现在偶尔存入mysql5的可以是中文了。在ItemName,偶尔存入1个中文字,或好几个相同的中文字都行,
但存入2个不同的中文字 就不行了,报错
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'ItemName' at row 1
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2868)
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.Statement.executeUpdate(Statement.java:1316)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1235)
at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228)
at com.borrowsys.db.Worker.doUpdate(Worker.java:52)
at com.borrowsys.db.Worker.updateItem(Worker.java:165)
at org.apache.jsp.updateitem_jsp._jspService(updateitem_jsp.java:115)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)

怎么办啊?是doUpdate函数里加的s.executeUpdate("set names utf8"); 有错吗?
都快绝望了!
回复 点赞
yuer1985 2007年08月15日
提交时的编码可以设定为iso-8859-1
回复 点赞
yuer1985 2007年08月15日
提交时的编码是iso-8859-1
回复 点赞
jerrycool 2007年08月14日
还有建数据库时,要指定数据库编码为utf-8,然后楼上们说的:

"在所有语句前加上:set names utf8"

"关键在于你用什么样的WEB容器。
如果是Tomcat的话需要转码。用Resin就没这种问题。
顺便说一句:70%的乱码解决方案都是为Tomcat准备的。"

都不是问题!
我就没有加:set names utf8
我就用tomcat!Resin用过几天,偶尔持续占用CPU达50%左右,放弃了
回复 点赞
发动态
发帖子
MySQL
创建于2007-09-28

2.4w+

社区成员

5.5w+

社区内容

MySQL相关内容讨论专区
社区公告
暂无公告