数据库mysql5.0
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;
my.ini文件:
[client]port=3306[mysql]default-character-set=GBK
# SERVER SECTION
# ----------------------------------------------------------------------
#
# The following options will be read by the MySQL Server. Make sure that
# you have installed the server correctly (see above) so it reads this 
# file.
#
[mysqld]# The TCP/IP Port the MySQL Server will listen on
port=3306
character_set_server =GBK#Path to installation directory. All paths are usually resolved relative to this.
basedir="C:/Program Files/MySQL/MySQL Server 5.0/"#Path to the database root
datadir="C:/Program Files/MySQL/MySQL Server 5.0/Data/"# The default character set that will be used when a new schema or table is
# created and no character set is defined
default_character_set=GBK
页面全部是:
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%>
struts.xml:
<constant name="struts.il8n.encoding" value="GBK"></constant>
struts.properties:struts.locale=en_GB;
web.xml:
 <filter-name> 
   Set Web Application Character Encoding 
  </filter-name> 
  <filter-class>com.shop.util.SetCharacterEncodingFilter</filter-class> 
  <init-param> 
   <param-name>defaultencoding</param-name> 
   <param-value>GBK</param-value> 
  </init-param> 
 </filter> 
 <filter-mapping> 
  <filter-name> 
   Set Web Application Character Encoding 
  </filter-name> 
  <url-pattern>/*</url-pattern> 
 </filter-mapping> 
<filter>
编码过滤器:
public class SetCharacterEncodingFilter implements Filter { protected FilterConfig filterConfig = null; 
 
    protected String defaultEncoding = null; 
 
    /**//* (non-Javadoc) 
     * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) 
     */ 
    public void init(FilterConfig arg0) throws ServletException { 
        // TODO Auto-generated method stub 
        this.filterConfig = arg0; 
        this.defaultEncoding = filterConfig.getInitParameter("defaultencoding"); 
    } 
 
    /**//* (non-Javadoc) 
     * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) 
     */ 
    public void doFilter( 
        ServletRequest request, 
        ServletResponse response, 
        FilterChain chain) 
        throws IOException, ServletException { 
        // TODO Auto-generated method stub 
        request.setCharacterEncoding(selectEncoding(request)); 
        chain.doFilter(request, response); 
    } 
 
 
    public void destroy() { 
         
        this.defaultEncoding = null; 
        this.filterConfig = null; 
    } 
 
 
    protected String selectEncoding(ServletRequest request) { 
 
        return this.defaultEncoding; 
    } 
 
}
数据库可以直接插入中文,但是运行代码的时候数据库里面显示???(问号),郁闷了 不知道哪里出了问题,救命啊!

解决方案 »

  1.   

    先把要写入数据库的内容输出到控制台,看看是否乱码。如果没有出错,再看看mysql编码方式的设置。数据库、表再、每一个字段,都设置成支持中文的统一的一个,最好用utf-8,据说这个会好一些。
      

  2.   

    检查一下struts Action 类如何读出中文的。另外,存入mysql前检查一下中文值是否正确。
      

  3.   

    看你建的表的格式是不是gb2312的show variables 再mysql里查询,然后贴上来
      

  4.   

    我在action里加了System.out.print(this.getUsername());输出的时候就出现了??(问号)这是哪里出错了.
      

  5.   

    你jsp界面的编码问题吧,最好是统一用utf-8
      

  6.   

    你在控制台已经表现出了乱码,那当然是页面上向后台提交的时候就有乱码了,而且你的过滤器没有起作用,可能是配置的不对 建议 
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf_8");
      

  7.   

    你在安装mysql时有没有手动设置字符格式为gb2312啊
      

  8.   

    1。6。8楼说的基本就这些,,我还是认为全部使用utf-8最好,没有编码的困扰
      

  9.   

    楼主用过mysql的可视化工具吗?那里有手动设置编码问题的,在设置数据库的时候,而不是在表
      

  10.   

    方案 
    1 页面设置成 gb2312
    2.过滤器社这request.setCharcterEncoding("gbk2312");
    3.链接数据库的写法注意: jdbc://mysql......编码方式,到网络上去找找 也用gb2312基本就OK拉
      

  11.   

    按照各位朋友的建议 全部换成utf8编码,控制台这边是没错了,可是在数据库里面却乱码,直接在数据库插入中文结果出现:Incorrect string value 错误,现在该怎么办啊!
      

  12.   

    解决方法一:从页面输入杜绝乱码出现的可能
    1、在jsp输入页面中加入:
    <%@pagecontentType="text/html;charset=数据库字符集"% > 
    2、在html标签的<head>的第一行加入
    <meta http-equiv="Content-Type" content="text/html; charset=数据库字符集" />解决方法二:使用javax.servlet.Filter
    1、编写web.xml配置。在
    这样就可以保证页面发送的数据的编码与数据库编码一致,这样从数据库中读取的数据就是你想要的正确字符了,你可放心的读取了
    <filter>
            <filter-name>encoding</filter-name>
            <filter-class>com.morecans.test.EncodingFilter</filter-class>
            <init-param>
                <param-name>charset</param-name>
                <param-value>utf-8</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>encoding</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>----------编写Filterservlet:com.morecans.test.EncodingFilter
     public void doFilter(ServletRequest servletrequest,
                 ServletResponse servletresponse, FilterChain filterchain)
                throws IOException, ServletException ...{
             request.setCharacterEncoding(数据库字符集);     
              response.setCharacterEncoding(数据库字符集); 
             filterchain.doFilter(servletrequest, servletresponse);
         }-----------------
    连接mysql的url设置为:
    jdbc:mysql://localhost:3306/dbName?useUnicode=true&characterEncoding=utf8以上只供参考,希望能帮到你。
      

  13.   

    说实在的,我前阵子也遇到这个问题,不过我当时用的是sql server2000.当时解决的方法是写一个中文转换的类,然后在数据写入数据库之前调用该类的方法将数据转换成中文。如果各位大虾有更好的方法的话,请告知小弟哦(*^__^*) 嘻嘻……
      

  14.   

    public class Chinese 
    {
      public static String convert(String str)
       {
        try{  
        byte s1[]=str.getBytes("ISO8859-1");
        return new String(s1,"gbk");
       }
    catch(Exception e)
    {
       return str;
    }
      }
    }
    忘了发代码了
      

  15.   

    终于成功了,奇怪的是我总是碰到一些很奇怪的问题要用很奇怪的方式解决。一些供也遇到类似问题的朋友参考:my.ini:[client]port=3306[mysql]default-character-set=GBK(这里设置成gbk)
    其他全部设置成utf8编码的,在mysql里面输入:show variables like '%char%'会发现有3个设置成了gbk,就没有乱码了,我也不知道其中的原因,所以当心如果是碰到一些很偏的汉字还会有可能乱码
      

  16.   

    引发乱码的问题有很多,我也不是很清楚。基本上,页面和服务程序(servlet),服务程序和服务程序之间的数据传输都是ISO,解决这方面的乱码通常是使用过滤器。而到了数据库那一层的,过滤器就无效了