怎么解决JSP页面存储查询mysql数据库的中文字段信息都是乱码

时间:2021-07-15 07:34:23
我在测试了一下 我使用jsp页面通过jdbc连接mysql数据库的
发现 如果是在命令行中插入中文字段信息 在命令行和JSP页面读取都显示正常
但如果在 页面中通过表单提交插入中文信息 则会在命令行和JSP页面均显示乱码
当前联接系统参数(mysql)

+--------------------------+----------------------------------------------------
-----+
| 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的结果

--------------+
| 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

      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());//取当前时间


下面是连接数据库的代码

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也没用

4 个解决方案

#1


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

#2


| character_set_database   | utf8
数据库用的是UTF-8,客户端用GBK连接,这都没问题,但是JSP页面也得用UTF-8或者在保存前使用代码转化成UTF-8编码(String mycontent=new String(content.getBytes("ISO-8859-1"),"UTF-8");)也可以

#3


把所有的编码都改为UTF-8,包括jsp页面,数据库编码等

#4


嗯,楼上都正解!楼主自己的数据库可以改成gb2312的格式,然后编码里可以试试gbk,和utf-8!

#1


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

#2


| character_set_database   | utf8
数据库用的是UTF-8,客户端用GBK连接,这都没问题,但是JSP页面也得用UTF-8或者在保存前使用代码转化成UTF-8编码(String mycontent=new String(content.getBytes("ISO-8859-1"),"UTF-8");)也可以

#3


把所有的编码都改为UTF-8,包括jsp页面,数据库编码等

#4


嗯,楼上都正解!楼主自己的数据库可以改成gb2312的格式,然后编码里可以试试gbk,和utf-8!