Struts+MySQL数据插入后,在MySQL里看是???的乱码,读出来也???,求终结解决方案
-------------------------------------------------
MySQL装的时候,选择了编码gbk ,这样 my.ini的 default character=gbk 了,即整个MySQL环境是GBK的了。
--------------------------------------------
在建库建表时,都指定编码为gbk,如 执行下面代码后,从MySQL图形工具MySQL和EMS SQLManager下看都正常显示中文。但再有JSP页面插入后,在MySQL图形工具
下看就是乱码???,再读出到JSP页面仍是乱码,显示的符号与数据库中一致(同样的 如 "用户名AA" 显示为 "×??áAA" )SET FOREIGN_KEY_CHECKS=0;
DROP DATABASE IF EXISTS `OnlineExam`;
CREATE DATABASE `OnlineExam`
CHARACTER SET 'gbk'
COLLATE 'gbk_chinese_ci';USE `OnlineExam`;DROP TABLE IF EXISTS `dept`;CREATE TABLE `dept` (
`Dept_ID` int(11) NOT NULL auto_increment,
`Dept_Name` varchar(20) default NULL,
`Dept_Detail` varchar(50) default NULL,
`Dept_Admin` varchar(20) default NULL,
PRIMARY KEY (`Dept_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='InnoDB free: 8192 kB';INSERT INTO `dept` (`Dept_ID`, `Dept_Name`, `Dept_Detail`, `Dept_Admin`) VALUES
(1,'信息中心','信息中心','admin'),
(2,'经理办公室','经理办公室','yangpool'),
(3,'党委','党委','fxfeiyi'),
(4,'组织部','组织部',NULL),
(5,'宣传部','宣传部',''),
(6,'团委','团委',NULL),
(7,'纪检部','纪检部',NULL),
(10,'工会','工会',NULL),
(26,'保卫科','保卫科','');------------------------------------------------
JSP页面设置:<%@ page contentType="text/html; charset=GBK"%> //说明
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html>
<head>
<title>新用户注册</title>
<meta http-equiv="Content-Type" content="text/html;charset=GBK">
<LINK href="Img_itbook/v1.1.css" rel=stylesheet type=text/css>
</head>页面顶部另外还有一种写法,在eclispe正常,不知和上面有区别否:<%@ page import="com.fxfeiyi.frame.database.DB,java.sql.*" pageEncoding="GBK"%> //-----------------------------------------------
连接MySQL的JAVA关键代码:package com.fxfeiyi.frame.database;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;public class DBCon {
public static Connection getConnection()
{
String DB="OnlineExam";
String USER="root";
String PWD="000";
String DBDriver="com.mysql.jdbc.Driver";
String DBURL="jdbc:mysql://localhost:3306/"+DB+"?user="+USER+"&password="+PWD;
//"&useUnicode=true&characterEncoding=GBK";
//注意DBURL处注释处,是否加上这段代码,都没解决插入乱码问题。
Connection conn = null; try
{
Class.forName(DBDriver);
conn = DriverManager.getConnection(DBURL);
}
catch (SQLException ex)
{
System.out.println(ex.getMessage() + "SQL语句执行错误!");
}
catch (ClassNotFoundException ex)
{
System.out.println(ex.getMessage() + "无法找到数据库驱动程序!");
}
return conn;
}
}
-----------------------------------------------
眼下正在用Struts做个考试系统,练习使用Struts,并尝试做一些通用模块,如
表单数据不写SQL自动插入、更新、删除等等,目的是以后开发节省时间。知道持久层已经实现这些东西,但还是想
先自己实现一下,不失是一种提高自己的方式。可目前中文问题,真是一个门槛!!
最近做了许多测试,各种情况组合,一时解决不了。请有经验者给个方案。当然更希望 MYSQL环境的编码 和 数据库及表的编码 都是统一的,我设置成GBK,最好在MYSQL图形工具下看到的是中文,
这样便于编程调试。
-------------------------------------------------
MySQL装的时候,选择了编码gbk ,这样 my.ini的 default character=gbk 了,即整个MySQL环境是GBK的了。
--------------------------------------------
在建库建表时,都指定编码为gbk,如 执行下面代码后,从MySQL图形工具MySQL和EMS SQLManager下看都正常显示中文。但再有JSP页面插入后,在MySQL图形工具
下看就是乱码???,再读出到JSP页面仍是乱码,显示的符号与数据库中一致(同样的 如 "用户名AA" 显示为 "×??áAA" )SET FOREIGN_KEY_CHECKS=0;
DROP DATABASE IF EXISTS `OnlineExam`;
CREATE DATABASE `OnlineExam`
CHARACTER SET 'gbk'
COLLATE 'gbk_chinese_ci';USE `OnlineExam`;DROP TABLE IF EXISTS `dept`;CREATE TABLE `dept` (
`Dept_ID` int(11) NOT NULL auto_increment,
`Dept_Name` varchar(20) default NULL,
`Dept_Detail` varchar(50) default NULL,
`Dept_Admin` varchar(20) default NULL,
PRIMARY KEY (`Dept_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='InnoDB free: 8192 kB';INSERT INTO `dept` (`Dept_ID`, `Dept_Name`, `Dept_Detail`, `Dept_Admin`) VALUES
(1,'信息中心','信息中心','admin'),
(2,'经理办公室','经理办公室','yangpool'),
(3,'党委','党委','fxfeiyi'),
(4,'组织部','组织部',NULL),
(5,'宣传部','宣传部',''),
(6,'团委','团委',NULL),
(7,'纪检部','纪检部',NULL),
(10,'工会','工会',NULL),
(26,'保卫科','保卫科','');------------------------------------------------
JSP页面设置:<%@ page contentType="text/html; charset=GBK"%> //说明
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html>
<head>
<title>新用户注册</title>
<meta http-equiv="Content-Type" content="text/html;charset=GBK">
<LINK href="Img_itbook/v1.1.css" rel=stylesheet type=text/css>
</head>页面顶部另外还有一种写法,在eclispe正常,不知和上面有区别否:<%@ page import="com.fxfeiyi.frame.database.DB,java.sql.*" pageEncoding="GBK"%> //-----------------------------------------------
连接MySQL的JAVA关键代码:package com.fxfeiyi.frame.database;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;public class DBCon {
public static Connection getConnection()
{
String DB="OnlineExam";
String USER="root";
String PWD="000";
String DBDriver="com.mysql.jdbc.Driver";
String DBURL="jdbc:mysql://localhost:3306/"+DB+"?user="+USER+"&password="+PWD;
//"&useUnicode=true&characterEncoding=GBK";
//注意DBURL处注释处,是否加上这段代码,都没解决插入乱码问题。
Connection conn = null; try
{
Class.forName(DBDriver);
conn = DriverManager.getConnection(DBURL);
}
catch (SQLException ex)
{
System.out.println(ex.getMessage() + "SQL语句执行错误!");
}
catch (ClassNotFoundException ex)
{
System.out.println(ex.getMessage() + "无法找到数据库驱动程序!");
}
return conn;
}
}
-----------------------------------------------
眼下正在用Struts做个考试系统,练习使用Struts,并尝试做一些通用模块,如
表单数据不写SQL自动插入、更新、删除等等,目的是以后开发节省时间。知道持久层已经实现这些东西,但还是想
先自己实现一下,不失是一种提高自己的方式。可目前中文问题,真是一个门槛!!
最近做了许多测试,各种情况组合,一时解决不了。请有经验者给个方案。当然更希望 MYSQL环境的编码 和 数据库及表的编码 都是统一的,我设置成GBK,最好在MYSQL图形工具下看到的是中文,
这样便于编程调试。
解决方案 »
- JSP中$问题
- tomcat或resin加载工程时出现这个问题,焦急等待,谢谢
- java中除了jsp,还有什么也可以用于做网站?
- JBPM4.3结合规则器如何发布
- 哪位高手帮帮忙,一个关于smartupload上传的奇怪问题,小弟不才,调试了一天,还没调试出来,急啊
- cewolf 问题请教!
- 关于PreparedStatement的一个小问题,刚刚接触JAVA
- 一个数据转换问题,将文本框里的数据转换为整型!!!
- startup.bat启动tomcat后过了一会儿自动停止,如何处理?
- 关于聊天室主界面的问题
- 数据库连接池?
- Unable to compile class for JSP 怎么解决啊.
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class CharSetFilter implements Filter{
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
request.setCharacterEncoding("GBK");
response.setContentType("text/html;charset=GBK");
chain.doFilter(req, res);
}
public void init (FilterConfig config) throws ServletException
{}
public void destroy (){}
}
找到MYSQL安装目录下my.ini文件,加上下面这句
[mysqld]
default-character-set=utf-8
保存,重新启动MYSQL
我试验过,感觉不如GBK好,utf-8显示中文在MySQL IDE下显示数据是乱码。
加了个
<controller processorClass="com.fxfeiyi.frame.filters.FilterRequestProcessor"/>到struts-config.xml,struts action乱码解决。package com.fxfeiyi.filters;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import fr.improve.struts.taglib.layout.workflow.LayoutRequestProcessor; public class FilterRequestProcessor extends LayoutRequestProcessor {
public FilterRequestProcessor() {
}
protected boolean processPreprocess(
HttpServletRequest request,
HttpServletResponse response ){
try{
request.setCharacterEncoding("GBK");
}
catch(Exception ex){
System.out.println("Encoding error!");
}
return true;
}
}
package com.fxfeiyi.frame.filters;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.RequestProcessor; public class FilterRequestProcessor extends RequestProcessor {
public FilterRequestProcessor() {
}
protected boolean processPreprocess(
HttpServletRequest request,
HttpServletResponse response ){
try{
request.setCharacterEncoding("GBK");
}
catch(Exception ex){
System.out.println("字符集设置失败");
}
return true;
}
}
characterEncoding=GBK