环境:mysql5.0,jdbc3.1.13; 
mysql环境设置: 
set character_set_database = utf8; 
SET character_set_client = gbk; 
SET character_set_results = gbk; 
SET character_set_connection = gbk; 
set character_set_server = latin1; jdbc连接数据库设置:;useUnicode=true&characterEncoding=gbk; 页面提交中文数据,servlet得到数据的时候是ISO8859_1, 
把这个数据编码一下  String test = new String(xxxx.getBytes("ISO8859_1"), "GBk"); 
test是gbk编码,打印出来是中文.[假设test='中文字符'] 
把这个数据通过jdbc写入(insert tableName set rowName = '中文字符';)mysql数据库, 在数据库中看到的数据就是乱码.如果直接在mysql的客户端执行 insert tableName set rowName = '中文字符';中文就不出现乱码. 
取出数据也不会出现乱码. 查了很多资料,都没有找到答案,弄的晕死我了,不知道为什么写入的时候会出现乱码. 
//jdbc驱动还试过3.1.7, 
数据库编码,试过big5,utf8,latin1, 
String test = new String(xxxx.getBytes("ISO8859_1"), "GBk");试过不编码的 
useUnicode=true&characterEncoding=gbk;试过useUnicode=true&characterEncoding=gb2312/utf8; 

解决方案 »

  1.   

    useUnicode=true&characterEncoding=gbk;你把gbk改成utf-8试试看,好久没弄过了。有些记不清楚了。
      

  2.   

    建议你尝试以下操作:
    1、使用转码后的test,执行sql语句"insert tableName set rowName = '"+test+"'",看看数据库中是不是乱码
    2、直接在servlet中写sql语句"insert tableName set rowName = '测试'",看看是不是乱码。
    因为你的应用服务器环境是iso的,你又使用了中文字符和数据库连接,所以可能会有些问题,最好的解决方法是将应用服务器环境也改成gbk的。
      

  3.   

    String sql = "insert into `dh_bookyears` set yearsName='测试中文'";
      String sql1 = new String(sql.getBytes(
          "gbk"), "ISO8859_1");
      String sql2 = new String(sql.getBytes(
          "ISO8859_1"), "gbk");
      try {
        pb = new PoolBean();
        conn = pb.getConnection();
        pst = conn.prepareStatement(sql);///这里用sql,sql1,sql2,写入都是乱码
        int is = pst.executeUpdate();
      

  4.   

    写一个filterimport java.io.IOException;import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;public class SetCharacterEncodingFilter implements Filter {  public void init(FilterConfig config) {  }  public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        
        request.setCharacterEncoding("gb2312");
        chain.doFilter(request, response);
      }  public void destroy() {  }
    }
    然后配置web.xml
    <web-app>后加上
    =============<filter>
      <filter-name>Set Character Encoding</filter-name>
      <filter-class>SetCharacterEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
      <filter-name>Set Character Encoding</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>
      

  5.   

    把这个my.ini文件写到你的windows目录下:
    my.ini内容如下:
    [WinMySQLAdmin]
    Server=D:/mysql/bin/mysqld-nt.exe[mysqld]
    basedir=D:/mysql
    datadir=D:/mysql-data/datadefault-character-set=gbk[client]
    default-character-set=gbk我机器上把MYSQL放到D盘了,你根据自己装的位置配制一下!
      

  6.   

    自己写一个servletimport java.io.*;import javax.servlet.*;
    import javax.servlet.http.*;import org.apache.struts.action.*;public class CodeActionServlet extends ActionServlet {
        String CharsetName;
        public void init(ServletConfig config) throws ServletException {
            super.init(config);
            CharsetName = config.getInitParameter("CharsetName");
            //获得在Web.xml文件中的字符集,中文为GB2312,台湾为MS950
        }    public void process(HttpServletRequest request,
                            HttpServletResponse response) throws ServletException,
                IOException {
            try {
                request.setCharacterEncoding(CharsetName);
            } catch (UnsupportedEncodingException e) {
                System.out.println(e.toString());
            }
            super.process(request, response);
        }
    }
    这样就可以保证你写入数据库的不会是乱码,读取也就没问题了
      

  7.   

    看看这里,你就明白了:
    http://www.blogjava.net/rickhunter/articles/33571.html
      

  8.   

    这是我总结的一些解决方案,不知对LZ有帮助没
    1: 安装MySQL数据库时候就指定字符集合为gbk或者gb2312,只要数据库中显示正常中文字符的话,页面肯定显示正常,哪来这么多的转换,烦死了!!
    2: 指定服务器的 编码   GBK   或者GB23123: 修改安装目录下的  初始化配置文件   my.ini# The TCP/IP Port the MySQL Server will listen on
    port=3306
    #Path to installation directory. All paths are usually resolved relative to this.
    basedir="E:/MySQL5/"#Path to the database root
    datadir="E:/MySQL5/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=latin1             换成  gbk   或者  gb2312# The default storage engine that will be used when create new tables when
    default-storage-engine=INNODB