我在测试了一下 我使用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试试
------解决方案--------------------------------------------------------