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

jsp连接SQL数据库,在数据库显示的中文乱码问题
如题~我用的是SQL2005的数据库,网页用JSP+Servlet+javabean写,在Servlet获取了JSP表单数据在传入javabean中连接数据库
大致的代码如下,
Servlet:
String name = (String)request.getParameter("name");
String sex = (String)request.getParameter("sex");
String birthyear = (String)request.getParameter("birthyear");
String birthmonth = (String)request.getParameter("birthmonth");
String political = (String)request.getParameter("political");
String education = (String)request.getParameter("education");
String city = (String)request.getParameter("city");
String phone = (String)request.getParameter("phone");
String email = (String)request.getParameter("email");

response.setContentType("text/html; charset=ISO-8859-1 ");
PS:上面charset我曾经用过GB2312,UTF-8,在SQL中显示一样乱码 
//request.setCharacterEncoding( "gb2312 ");

ResumeManage.CreatResume(userID, name, sex, birthyear, birthmonth, political, education, city, phone, email);

javabean的代码就应该不用贴出来了。。既然能写入数据库,连接方面应该没问题。。。

另外还想问个问题,在javabean写入数据库时,是把SQL语句保存到一个String里面,那么就是所有的数据都是String类型,写入到数据库时系统会自动帮你改成数据库对应的类型?(如int,bigint,boolean,datetime等等)

------解决方案--------------------
乱码的问题可能发生几个环节,由于不知道你环境的情况,所以你要分成两部分来进行测试:
1、页面提交的数据,request.getParameter("name")之后,是否能正常显示,这个可以用System.out.println(name)来测试;
2、准备写入数据库的数据,如果本身就是正常的,那么数据库中是否能正常保存,这个可以直接写死内容,比如:ResumeManage.CreatResume(userID, "帅哥", sex, birthyear, birthmonth, political, education, "中国中国", phone, email);

先判断是哪部份出了问题,当然也非常可能是两部分都出了问题。

如果是问题1的话,调整response.setContentType("text/html; charset=gb2312 "); 或者UTF-8来解决,也可以修改中间件的默认字符集。

如果是问题2的话,要进一步检查是否数据库字符集本身设置就是错误的,比如用了不支持中文的字符集,尤其是MySQL的话,默认创建数据库应该就是不支持中文的。

最后:建议中间件、源代码字符集、数据库字符集 全部保持一致:UTF-8。
------解决方案--------------------
不支持UTF-8?这有点诡异。那就用GBK好了,也可以是 GB18030

GB2312可以认为是GBK或GB18030的子集,不建议直接使用GB2312,字符集太少。


当然,如果你能100%确定页面字符集和数据库字符集的话,可以这么转换:

String DBname = new String (name.getBytes("页面字符集"), "数据库字符集");
然后把DBname入库。