这个问题困扰了 快一个月了!

时间:2021-12-13 23:25:14
使用myecipse4.1 开发jsp与数据库mysql的 增. 查. 操作!
 我查如中文时在数据库中显示乱码 把数据中的中文数据查询出来也显示乱码 
    IDE和MYSSQL我都使用默认编码 页面我使用gbk编码 
     请问这个问题怎么解决? 谢谢大家

22 个解决方案

#1


那是你数据库中的数据就是乱码!应该考虑在插入的时候就应该转变成中文!

#2


转码 行不行?
或者全部用Utf-8

#3


全部使用 utf8 编码,可以解决这个问题

#4


注意数据库链接字符串
jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=GBK

#5


characterEncoding

按樓上的試試。

#6


乱码问题是常见问题了,具体机制我也不太清楚,我只知道,所有涉及编码的东西,全部用utf-8,就可以解决了

#7


你的mysql的版本是什么?我用的5.0的就没有这个问题

#8


我使用的也是mysql5.0  当我全使用默认的编码方式 问题还是存在啊! 
   全部默认的编码方式 是utf-8吗?

#9


我想问你下 那些地方 需要变成UTF-8编码?

#10


编码问题。要将页面采用UTF-8编码

#11


1:用户页面输入“中文”采用UTF-8编码"e4b8ad e69687"

2:TOMCAT将其转换为ISO8859-1表示"e4 b8 ad e6 96 87"六个字节

3:JAVA程序中获取提交参数String str = getParameter("name"); 认为发送来的数据是以ISO8859-1编码"e4 b8 ad e6 96 87",然后将其转换为JAVA内部的Unicode编码"00e4 00b8 00ad 00e6 0096 0087"并赋给str.(可以使用request.setCharacterEncoding("UTF-8")来指定编码统一过滤)

4:str.getBytes( "ISO8859-1" )获得使用ISO8859-1解码str的字节数组"e4 b8 ad e6 96 87";new String( str.getBytes( "ISO8859-1" ), "utf-8" )使用utf-8给字节数组从新编码"e4b8ad e69687",并将其转换为Unicode"4e2d 6587";转码过程完毕。

这个过程中有错误吗?

#12



mysql默认编码8859-1;
你需要先把mysql的默认编码改成gb2312或utf-8,主要根据你的整体~

我习惯都使用utf-8,IDE环境,mysql,mysql连接,jsp等等都使用utf-8,这样出现乱码的机会比较小。

#13


该回复被版主删除

#14


该回复被版主删除

#15


写一个过滤

#16


public class CharacterFilter implements Filter {

public void destroy() {
// TODO Auto-generated method stub

}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
response.setContentType("text/html;charset=UTF-8");
}

public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub

}

}

#17


mysql数据库开发时 一般改为utf-8

#18


哎我是在sql server 2000上出现乱码
现在都没解决
同病相怜啊

#19


<%@ page contentType="text/html;charset=gbk" %> 
<%@ page language="java" import="java.sql.*"%> 
<% 
Connection conn = null; 

Class.forName("org.gjt.mm.mysql.Driver").newInstance(); 

conn = java.sql.DriverManager.getConnection("jdbc:mysql://localhost/zqswork?useUnicode=true&characterEncoding=gbk","root","root"); 
if(conn==null){ 
System.out.println("get Conn Error"); 

Statement stmt=conn.createStatement(); 
int RS_result=0; 
%> 
<html> 
<head> 
<title>学习</title></head> 
<body> 
<% 
RS_result=stmt.executeUpdate("insert into zqsworktable(username,password,email)values('zqs11松哥哥','zqs222','333@sohu.com')"); 
if(RS_result>0) 

out.println("成功拉");

} else{
   out.println("失败拉");  
}
 
stmt.close(); 
conn.close();

 
%> 
</body> 
</html>
-----------------------------------------------------------------------------------
错误提示!
encountered an internal error () that prevented it from fulfilling this request.

exception 

javax.servlet.ServletException: Data truncation: Data too long for column 'username' at row 1
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
org.apache.jsp.MyJsp002_jsp._jspService(MyJsp002_jsp.java:85)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause 

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'username' at row 1
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2973)
com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1600)
com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1695)
com.mysql.jdbc.Connection





请求给出解决办法

#20


使用类似语句取出mysql5.0中的 中文数据 取出来的是乱码

#21


Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost/shujuku?user=root&password=mfditfyu&useUnicode=true&characterEncoding=GBK");
Statement stm=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rs=stm.executeQuery("select * from biao1");

#22


在安装MYSQL时选择字符集时请选"GB2312",访问时Connection con=DriverManager.getConnection("jdbc:mysql://localhost/shujuku?user=root&password=abc&useUnicode=true&characterEncoding=GBK");

#23


还是查不进去 出现上面哪个错误!

#24


这个问题差不多一个月没有解决 CSDN上很多朋友提供了N多办法!但是都因为要改这改那很麻烦。现在是晚上1:24 (07/5/25夜)问题解决总结如下:
-----------------------------------------------------------
  mysql5.0+myeclipse4.1+tomcat5.0 全部使用默认编码方式
  1:插如数据到mysql中:
     在页面上加入本页的编码方式 
    <%@ page contentType="text/html;charset=gb2312" %>
     把你要插入的中文文字由gb2312转变为iso-8859
    title = new String(title.getBytes("GB2312"), "ISO-8859-1");
    ***注意此页面千万别在数据库的URL后面加任何编码方式*****
    conn = java.sql.DriverManager.getConnection    ("jdbc:mysql://localhost/zqswork","root","root");
  
   2:从mysql中读出数据到页面:
     依然在页面上加如编码方式
  <%@ page contentType="text/html;charset=gb2312" %> 
     把你要读出的中文由iso-8859转变为gb2312
  <%username = new String(username.getBytes("ISO-8859-1"), "gb2312");%>
   ****注意此页面一定要在数据库url处加入编码方式(与上面相反)******
    conn = java.sql.DriverManager.getConnection("jdbc:mysql://localhost/zqswork?useUnicode=true&characterEncoding=gb2312","root","root"); 



---------------------------------------------------------------ok 继续你的j2ee旅游吧!                                                                              byzqswork

#1


那是你数据库中的数据就是乱码!应该考虑在插入的时候就应该转变成中文!

#2


转码 行不行?
或者全部用Utf-8

#3


全部使用 utf8 编码,可以解决这个问题

#4


注意数据库链接字符串
jdbc:mysql://localhost:3306/db?useUnicode=true&amp;characterEncoding=GBK

#5


characterEncoding

按樓上的試試。

#6


乱码问题是常见问题了,具体机制我也不太清楚,我只知道,所有涉及编码的东西,全部用utf-8,就可以解决了

#7


你的mysql的版本是什么?我用的5.0的就没有这个问题

#8


我使用的也是mysql5.0  当我全使用默认的编码方式 问题还是存在啊! 
   全部默认的编码方式 是utf-8吗?

#9


我想问你下 那些地方 需要变成UTF-8编码?

#10


编码问题。要将页面采用UTF-8编码

#11


1:用户页面输入“中文”采用UTF-8编码"e4b8ad e69687"

2:TOMCAT将其转换为ISO8859-1表示"e4 b8 ad e6 96 87"六个字节

3:JAVA程序中获取提交参数String str = getParameter("name"); 认为发送来的数据是以ISO8859-1编码"e4 b8 ad e6 96 87",然后将其转换为JAVA内部的Unicode编码"00e4 00b8 00ad 00e6 0096 0087"并赋给str.(可以使用request.setCharacterEncoding("UTF-8")来指定编码统一过滤)

4:str.getBytes( "ISO8859-1" )获得使用ISO8859-1解码str的字节数组"e4 b8 ad e6 96 87";new String( str.getBytes( "ISO8859-1" ), "utf-8" )使用utf-8给字节数组从新编码"e4b8ad e69687",并将其转换为Unicode"4e2d 6587";转码过程完毕。

这个过程中有错误吗?

#12



mysql默认编码8859-1;
你需要先把mysql的默认编码改成gb2312或utf-8,主要根据你的整体~

我习惯都使用utf-8,IDE环境,mysql,mysql连接,jsp等等都使用utf-8,这样出现乱码的机会比较小。

#13


该回复被版主删除

#14


该回复被版主删除

#15


写一个过滤

#16


public class CharacterFilter implements Filter {

public void destroy() {
// TODO Auto-generated method stub

}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
response.setContentType("text/html;charset=UTF-8");
}

public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub

}

}

#17


mysql数据库开发时 一般改为utf-8

#18


哎我是在sql server 2000上出现乱码
现在都没解决
同病相怜啊

#19


<%@ page contentType="text/html;charset=gbk" %> 
<%@ page language="java" import="java.sql.*"%> 
<% 
Connection conn = null; 

Class.forName("org.gjt.mm.mysql.Driver").newInstance(); 

conn = java.sql.DriverManager.getConnection("jdbc:mysql://localhost/zqswork?useUnicode=true&characterEncoding=gbk","root","root"); 
if(conn==null){ 
System.out.println("get Conn Error"); 

Statement stmt=conn.createStatement(); 
int RS_result=0; 
%> 
<html> 
<head> 
<title>学习</title></head> 
<body> 
<% 
RS_result=stmt.executeUpdate("insert into zqsworktable(username,password,email)values('zqs11松哥哥','zqs222','333@sohu.com')"); 
if(RS_result>0) 

out.println("成功拉");

} else{
   out.println("失败拉");  
}
 
stmt.close(); 
conn.close();

 
%> 
</body> 
</html>
-----------------------------------------------------------------------------------
错误提示!
encountered an internal error () that prevented it from fulfilling this request.

exception 

javax.servlet.ServletException: Data truncation: Data too long for column 'username' at row 1
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
org.apache.jsp.MyJsp002_jsp._jspService(MyJsp002_jsp.java:85)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause 

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'username' at row 1
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2973)
com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1600)
com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1695)
com.mysql.jdbc.Connection





请求给出解决办法

#20


使用类似语句取出mysql5.0中的 中文数据 取出来的是乱码

#21


Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost/shujuku?user=root&password=mfditfyu&useUnicode=true&characterEncoding=GBK");
Statement stm=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rs=stm.executeQuery("select * from biao1");

#22


在安装MYSQL时选择字符集时请选"GB2312",访问时Connection con=DriverManager.getConnection("jdbc:mysql://localhost/shujuku?user=root&password=abc&useUnicode=true&characterEncoding=GBK");

#23


还是查不进去 出现上面哪个错误!

#24


这个问题差不多一个月没有解决 CSDN上很多朋友提供了N多办法!但是都因为要改这改那很麻烦。现在是晚上1:24 (07/5/25夜)问题解决总结如下:
-----------------------------------------------------------
  mysql5.0+myeclipse4.1+tomcat5.0 全部使用默认编码方式
  1:插如数据到mysql中:
     在页面上加入本页的编码方式 
    <%@ page contentType="text/html;charset=gb2312" %>
     把你要插入的中文文字由gb2312转变为iso-8859
    title = new String(title.getBytes("GB2312"), "ISO-8859-1");
    ***注意此页面千万别在数据库的URL后面加任何编码方式*****
    conn = java.sql.DriverManager.getConnection    ("jdbc:mysql://localhost/zqswork","root","root");
  
   2:从mysql中读出数据到页面:
     依然在页面上加如编码方式
  <%@ page contentType="text/html;charset=gb2312" %> 
     把你要读出的中文由iso-8859转变为gb2312
  <%username = new String(username.getBytes("ISO-8859-1"), "gb2312");%>
   ****注意此页面一定要在数据库url处加入编码方式(与上面相反)******
    conn = java.sql.DriverManager.getConnection("jdbc:mysql://localhost/zqswork?useUnicode=true&characterEncoding=gb2312","root","root"); 



---------------------------------------------------------------ok 继续你的j2ee旅游吧!                                                                              byzqswork