如果mysql的中文问题很好解决的话,为什么有这么多人要问?
我就是不理解为什么中文编码兼容性的问题这么难搞定.到底这是谁的责任???
一个好的产品应该是便于使用才对呀.为什么会这样?我在mysql的命令行中输入以下命令所返回的结果如下:
>status;--------------
mysql  Ver 14.12 Distrib 5.0.15, for Win32 (ia32)
Connection id:          1
Current database:       instartdb1
Current user:           root@localhost
SSL:                    Not in use
Using delimiter:        ;
Server version:         5.0.15-nt
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    gb2312
Db     characterset:    gb2312
Client characterset:    gb2312
Conn.  characterset:    gb2312
TCP port:               3306
Uptime:                 11 min 16 secThreads: 1  Questions: 54  Slow queries: 0  Opens: 2  Flush tables: 1  Open tabl
es: 8  Queries per second avg: 0.080
--------------我再输入一个命令:
mysql>show variables like 'char%';返回如下结果:-----+
| Variable_name            | Value
     |
+--------------------------+----------------------------------------------------
-----+
| character_set_client     | gb2312
     |
| character_set_connection | gb2312
     |
| character_set_database   | gb2312
     |
| character_set_results    | gb2312
     |
| character_set_server     | gb2312
     |
| character_set_system     | utf8
     |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.0\share\chars
ets/ |
+--------------------------+----------------------------------------------------
-----+
7 rows in set (0.17 sec)我再打开my.ini,可以看到:[client]
port=3306
[mysql]
default-character-set=gb2312
... ...
[client]
port=3306
[mysql]
default-character-set=gb2312如果说以上信息说明我的mysql的字符集编码是gb2312的,对不对?
那么我创建一个数据库:create database test8 character set gb2312; 这样的指令应该不犯法吧?
现在到我的后台代码去看一下我是怎么连数据库的:(这是applicationContext.xml中的配置代码)<property name="jdbcUrl">
   <value>jdbc:mysql://localhost:3306/instartDB1??useUnicode=true&amp;characterEncoding=gb2312</value>
</property>这样的连接设置不至于会造成数据库的字符集的不兼容吧?
在mysql命令行中可以对数据表插入中文并正确显示,但不是显示在网页,而是显示在黑黑的屏幕上.
屏幕上显示的是???号.
我的service类中的相关代码是: public void addArticleSort(ActionForm form){
ArticleSort arSort = new ArticleSort();
DynaActionForm arForm = (DynaActionForm)form;
String sortName = (String)arForm.get("sortName");
String sortTitle = (String)arForm.get("sortTitle");
if(null==sortName || null==sortTitle)
return;
try {
sortName = new String(sortName.getBytes("gb2312"));
sortTitle = new String(sortTitle.getBytes("gb2312"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("sortName:" + sortName);
System.out.println("sortTitle:" + sortTitle);
arSort.setName(sortName);
arSort.setTitle(sortTitle);
this.articleDao.addArticleSort(arSort);
}上面的try代码块就算删掉,也一样回显乱码.我的前台jsp的头部代码是这样的:<%@ page language="java" contentType="text/html; charset=GB2312"
    pageEncoding="GB2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%String path = request.getContextPath() + "/"; %>
<%request.setCharacterEncoding("gb2312"); %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
<title>文章管理</title>
... ...如果我说我的页面提交的字符集和数据库的会对应,你们应该相信吧?
当然在页面上数据库回显是用el表达式和struts的c标签结合来控制输出的,但得到的都是问号:
部分代码:已有类别:... ...
<select>
<c:choose>
<c:when test="${empty sortList}">
<option></option>
</c:when>
<c:otherwise>
<c:forEach items="${sortList}" var="sort">
<option value="${sort.name }">${sort.title }</option>
</c:forEach>
</c:otherwise>
</c:choose>
</select>
&nbsp;&nbsp;... ...
我不知道对于mysql的乱码我还能做什么?当我请教我的同学或同事时,有的人懵懵懂懂,糊里糊涂就装后使用了,一点中文问题都没有,可能是天生命好吧..我小心安装,七设置八设置,可mysql还是乱码?
mysql真对不起我了.虽然本人水平有限,可经过上述设置后如果还没设置够的话,我只能说,mysql的产品本身有问题.在这里发贴也是没办法的事情..希望哪位高手能指出我的错误和不足,以便让我能早日解决这个中文乱码的问题.谢谢大家!!

解决方案 »

  1.   

    最近我做过一个, 把数据库改成了gbk ,然后页面也改成了gbk然后问题解决了 ,但不知道具体为什么 ~~下面是我找的材料 :jsp插入mysql数据库后乱码的解决办法文章摘要:  jsp   页面用下面3句语句来保证是gbk   编码   
    <%@   page   session="true"   %>     
    <%@   page   contentType="text/html;charset=gb   
    jsp   页面用下面3句语句来保证是gbk   编码
      <%@   page   session="true"   %>   
      <%@   page   contentType="text/html;charset=gbk"   %>     
      <%@page   pageEncoding="gbk"%>   
      <%request.setCharacterEncoding("gbk");%>    
      数据库连接用如下语句   
      String ConnStr   ="jdbc:mysql://localhost:3306/test?user=michael&password=123456&useUnicode=true&characterEncoding=gbk"   ;   
      并且在mysql的my.ini的内容如下   
      basedir=D:/mysql   
      #bind-address=127.0.0.1   
      datadir=D:/mysql-data/data   
      default_character_set=gbk   
      #language=D:/mysql/share/your   language   directory   
      #slow   query   log#=   
      #tmpdir#=   
      #port=3306   
      #set-variable=key_buffer=16M   
      [WinMySQLadmin]   
      Server=D:/mysql/bin/mysqld-nt.exe   
      user=michael   
      password=123   
      [client]   
      default_character_set=gbk   
        
      读jsp页面之间传递的参数在页面显示正常  
      在dos命令行下插入数据后,显示也正常  其中一条插入语句如下:   
      <jsp:useBean   id="reg"   scope="page"   class="test.chatreg"   />   
      String   strSQL="insert   into   chatreg(username   ,   password   ,   email   ,homepage   )   
        values('"   +   regName   +   "',     '"   +   regPassword   +"'     ,     '"   +   regEmail   +   "'     ,   '"   +   regHomepage   +   "')   ";   
        reg.executeQuery(strSQL);   
    name   =   request.getParameter("name").getBytes("iso8859_1","gb2312");  
      

  2.   

    主要是在页面参数值传递的时候不是以gb2312编码传递的,一般在过滤器里面调用request.setCharacterEncoding()方法来改变参数编码,要么
        public static String tran(String temp) {
         String target=null;
         if(temp==null||temp==""){
         return "";
         }else{
         try{
         target=new String(temp.getBytes("ISO-8859-1"));
         }catch(UnsupportedEncodingException e){
         e.printStackTrace();
         }
         return target;
         }
        }调用类次这样的方法来