jsp连接SQL数据库,在数据库显示的中文乱码问题

0zien0 2012-01-23 05:14:38
如题~我用的是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等等)
...全文
524 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
heartlc 2012-01-24
  • 打赏
  • 举报
回复
你可以试试看写一个过滤器看看。 以前写struts,遇到乱码情况,都是这么解决的。不知道适不适合你的情况。
0zien0 2012-01-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 herminen 的回复:]

request.setCharacterEncoding( "gb2312 ");

这句要放在取值之前的啊!你都去过值了再设置编码规则当然没用啦。
[/Quote]
我放在最前面了
//response.setContentType("text/html; charset=ISO8859-1 ");
//request.setCharacterEncoding("GBK");
放在最前面,用GBK,UTF-8,ISO8859-1都是乱码
0zien0 2012-01-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ldh911 的回复:]

不支持UTF-8?这有点诡异。那就用GBK好了,也可以是 GB18030

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


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

String DBname = new String (name.getBytes("页面字符集"), "数据库字符集");
然后把D……
[/Quote]

试了好几种方法,最后还是你上面那种方法行得通
不知道是不是我理解错,貌似你写反了,大概应该是:
String DBname = new String (name.getBytes("数据库字符集"), "页面字符集");

我这样写能输出正确结果:
String email = new String(request.getParameter("email").getBytes("ISO8859-1"),"UTF-8");
herminen 2012-01-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 a42626423 的回复:]
引用 6 楼 herminen 的回复:

request.setCharacterEncoding( "gb2312 ");

这句要放在取值之前的啊!你都去过值了再设置编码规则当然没用啦。

我放在最前面了
//response.setContentType("text/html; charset=ISO8859-1 ");
//request.setCharacterEnco……
[/Quote]
哦,lz试试将tomcat的server.xml修改一下
如:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="utf-8" />
加个URIEncoding试试
herminen 2012-01-23
  • 打赏
  • 举报
回复
request.setCharacterEncoding( "gb2312 ");

这句要放在取值之前的啊!你都去过值了再设置编码规则当然没用啦。
香蕉猪 2012-01-23
  • 打赏
  • 举报
回复
编码统一是很重要的....
Ajava攻城师 2012-01-23
  • 打赏
  • 举报
回复
乱码问题肯定就是字符集没有统一造成,楼主自己仔细分析前后台、以及数据传送的这几个过程哪个环节的编码出问题了,这个要是搞定了,乱码基本可以搞定
MiceRice 2012-01-23
  • 打赏
  • 举报
回复
不支持UTF-8?这有点诡异。那就用GBK好了,也可以是 GB18030

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


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

String DBname = new String (name.getBytes("页面字符集"), "数据库字符集");
然后把DBname入库。
0zien0 2012-01-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ldh911 的回复:]

乱码的问题可能发生几个环节,由于不知道你环境的情况,所以你要分成两部分来进行测试:
1、页面提交的数据,request.getParameter("name")之后,是否能正常显示,这个可以用System.out.println(name)来测试;
2、准备写入数据库的数据,如果本身就是正常的,那么数据库中是否能正常保存,这个可以直接写死内容,比如:ResumeManage.CreatRes……
[/Quote]

你的第一个测试,我已经测试过了,是没问题的。
第2个测试直接写死内容,传到数据库也没问题。
估计是SQL的字符集和源代码字符集不符合,而且百度了下有些人说SQL2005不支持UTF-8.。。。

SQL+JSP用什么字符格式比较好。。
MiceRice 2012-01-23
  • 打赏
  • 举报
回复
乱码的问题可能发生几个环节,由于不知道你环境的情况,所以你要分成两部分来进行测试:
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。

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧