日期:2014-05-17  浏览次数:20597 次

怎么解决JSP页面存储查询mysql数据库的中文字段信息都是乱码
我在测试了一下 我使用jsp页面通过jdbc连接mysql数据库的
发现 如果是在命令行中插入中文字段信息 在命令行和JSP页面读取都显示正常
但如果在 页面中通过表单提交插入中文信息 则会在命令行和JSP页面均显示乱码
当前联接系统参数(mysql)
SQL code

+--------------------------+----------------------------------------------------
-----+
| Variable_name            | Value
     |
+--------------------------+----------------------------------------------------
-----+
| character_set_client     | gbk
     |
| character_set_connection | gbk
     |
| character_set_database   | utf8
     |
| character_set_filesystem | binary
     |
| character_set_results    | gbk
     |
| character_set_server     | latin1
     |
| character_set_system     | utf8
     |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\ |
+--------------------------+----------------------------------------------------





mysql命令行执行show create table boke的结果
SQL code

--------------+
| Table | Create Table



              |
+-------+-----------------------------------
--------------------------------------------
--------------------------------------------
--------------------------------------------
--------------+
| boke  | CREATE TABLE `boke` (
  `id` int(11) NOT NULL auto_increment,
  `title` varchar(200) collate utf8_bin NOT NULL,
  `content` longtext collate utf8_bin,
  `owner` varchar(20) collate utf8_bin NOT NULL,
  `time` varchar(40) collate utf8_bin NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin |
+-------+-----------------------------------





所有的JSP页面均采用的GBK编码
并且有将中文转码为ISO-8859-1
Java code

      String title=request.getParameter("title");
      String mytitle=new String(title.getBytes("ISO-8859-1"));
      
      
      
      String content=request.getParameter("content");
      String mycontent=new String(content.getBytes("ISO-8859-1"));
      //java.util.Date date=new java.util.Date();
      
      SimpleDateFormat tempDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      String time = tempDate.format(new java.util.Date());//取当前时间



下面是连接数据库的代码
Java code

try{
           Class.forName("com.mysql.jdbc.Driver");
           String url="jdbc:mysql://localhost/test?user=root&password=1234";
           Connection con=DriverManager.getConnection(url);
           String sql="insert into boke value(0,?,?,?,?)";
                     
           PreparedStatement pstmt=con.prepareStatement(sql);
           
           pstmt.setString(1,mytitle);
           pstmt.setString(2,mycontent);
           pstmt.setString(3,owner);
           pstmt.setString(4,time);
           
           //PreparedStatement pstmt=con.prepareStatement(sql);
           int m=pstmt.executeUpdate();
           pstmt.close();
           con.close();
           
      }catch(Exception e){
          out.print(e.getMessage());
          
      }



但还是不能解决乱码 求解释
还有在String url="jdbc:mysql://localhost/test?user=root&password=1234"; 中加入编码格式GBK也没用

------解决方案--------------------
你这里还得考虑系统的编码,你全部转换成UTF-8试试
------解决方案--------------------