自己的mysql乱码问题解决

虽然解决不过还是有疑惑的地方

解决方案:

在安装目录下找到my.ini这个文件,将client和server的字符设置都改为gbk

这样就好了

用 SHOW VARIABLES LIKE 'character_set_%';命令查看字符设置 我的修改后为:

| character_set_client     | gbk
     |
| character_set_connection | gbk
     |
| character_set_database   | gbk
     |
| character_set_filesystem | binary
     |
| character_set_results    | gbk
     |
| character_set_server     | gbk
     |
| character_set_system     | utf8

这样修改后 试验:

创建数据库 表:

create database java;

use java;

CREATE TABLE person
(
    id varchar(20) not null primary key ,
    name varchar(20) ,
    password varchar(20)
) ;

INSERT INTO person VALUES ('helle','你好','zzzzzz') ;

commit;

登陆界面:;login.jsp:

 

Code
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>

<html>
    
<head>
        
<title>jsp+jdbc test</title>
    
</head>

    
<body>
        
<center>
            
<h1>
                
---jsp+jdbc
            
</h1>
        
</center>
        
<hr>
        
<br>
        
<%
            
if (session.getAttribute("uname"!= null) {
                
//说明用户已经登陆
        %>
        
<h2>
            登陆成功
        
</h2>
        
<h2>
            欢迎
<%=session.getAttribute("uname")%></h2>
       
        <%
            } 
else {
                
//用户未登陆,提示用户登陆并跳转到登陆界面
                response.setHeader("refresh""2;URL=login.jsp");
        
%>
        您还未登陆,请先登陆!!!
        
<br>
        两秒钟后自动跳转到登陆界面!
        
<br>
        如果没有跳转请点击
        
<a href="login.jsp">这里</a>

        
<%
            }
        
%>
    
</body>
</html>

验证界面:login_conf.jsp:

 

 

Code
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ page import="java.sql.*"%>

<html>
    
<head>
        
<title>jsp+jdbc test</title>
    
</head>

    
<body>
        
<center>
            
<h1>
                jsp
+jdbc tst
            
</h1>
            
<hr>
            
<br>
            
<%!String DBDRIVER = "com.mysql.jdbc.Driver";
    
    String URL 
= "jdbc:mysql://localhost/java";
    String DBUname 
= "root";
    String DBpassword 
= "aaa";
    Connection conn 
= null;
    PreparedStatement pstmt 
= null;
    String sql 
= null;
    ResultSet rs 
= null;%>

            
<%
                
// 声明一个boolean变量,用于保存用户是否合法的状态
                boolean flag = false;
                
//接受参数
                String id = request.getParameter("id");
                String password 
= request.getParameter("password");
            
%>
            
<%
                sql 
= "select * from person where id=? and password=?";
                
try {
                    Class.forName(DBDRIVER).newInstance();
                } 
catch (Exception e) {
                    out.println(
"加载驱动错误");
                }
                
try {
                    conn 
= java.sql.DriverManager.getConnection(URL, DBUname,
                            DBpassword);
                            
                            
                } 
catch (Exception e) {
                    out.println(
"连接错误");
                }
                
try {
                    pstmt 
= conn.prepareStatement(sql);
                    pstmt.setString(
1, id);
                    pstmt.setString(
2, password);
                    rs 
= pstmt.executeQuery();
                    
if (rs.next()) {
                        
//用户合法
                        
                        flag 
= true;
                        
//将用户名保存在session中
                        session.setAttribute("uname", rs.getString(2));
                    } 
else {
                        
//保存错误信息    
                        request.setAttribute("err""错误的用户名和密码");
                    }
                    rs.close();
                    pstmt.close();
                    conn.close();

                } 
catch (Exception e) {
                    out.println(
"操作失败");
                }
            
%>
            
<%
                
//跳转
                if (flag) {
                    
//用户合法
            %>
            
<jsp:forward page="login_success.jsp"></jsp:forward>

            
<%
                }
                
//用户非法
                else {
            
%>
            请登陆
<jsp:forward page="login.jsp"></jsp:forward>

            
<%
                }
            
%>
        
</center>


    
</body>
</html>

成功页面:login_success.jsp:

 

 

Code
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>

<html>
    
<head>
        
<title>jsp+jdbc test</title>
    
</head>

    
<body>
        
<center>
            
<h1>
                jsp
+jdbc test
            
</h1>
        
</center>
        
<hr>
        
<br>
        
<%
            
if (session.getAttribute("uname"!= null) {
                
//说明用户已经登陆
        %>
        
<h2>
            登陆成功
        
</h2>
        
<h2>
            欢迎
<%=session.getAttribute("uname")%></h2>
        

        
<%
            } 
else {
                
//用户未登陆,提示用户登陆并跳转到登陆界面
                response.setHeader("refresh""2;URL=login.jsp");
        
%>
        您还未登陆,请先登陆!!!
        
<br>
        两秒钟后自动跳转到登陆界面!
        
<br>
        如果没有跳转请点击
        
<a href="login.jsp">这里</a>

        
<%
            }
        
%>
    
</body>
</html>

不过不明白的地方还是很多的:我只是修改了数据库中的编码 是用gbk来存了,可是在程序中我也没有写类似过滤器的代码,

 

以前我还在程序页面开头 加了:

<%
    request.setCharacterEncoding("gb2312");
    response.setCharacterEncoding("gb2312");  
%>

发现把这两句都删了 在成功页面还是能取出中文字符的

不知道为何 ?

今天可能明白一点了,写下:

request.setCharacterEncoding("gb2312");是设置用户jsp界面向服务器提交中文时用的。

上面的之所以去掉没有什么变化是因为:我们没有从jsp中提交数据,我们只是从数据库中读取了数据,在mysql5.0中设置好了 编码gbk后 自动就会在连接url中添加设置编码为gbk

到目前 估计对这个编码问题理解的还好了一点 了吧

posted @ 2009-03-29 11:11  xiaomiao  阅读(249)  评论(1编辑  收藏  举报