发现 如果是在命令行中插入中文字段信息 在命令行和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");)也可以
数据库用的是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");)也可以
数据库用的是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!