jsp jdbc插入mysql的汉字乱码,全变问号

mysql数据库字符集设为默认;

下面解决好的代码,没乱码,我测试过的

<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*,servlet.http.*,java.util.Date,java.text.*" errorPage="" %>
< %@ page import="com.mysql.jdbc.Driver" %>
< %
String sContent = new String(request.getParameter("content1").getBytes("iso8859_1"));

String hostip = "127.0.0.1";
String DBname = "test";
String user = "root";
String passwd = "";

Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection connection=DriverManager.getConnection("jdbc:mysql://"+hostip +"/"+DBname+"?user="+user+"&password="+passwd+"&useUnicode=true&characterEncoding=utf-8");

//注:上面这句如果写成下面这句,便会出现插入到数据库的汉字全变问号的情况(当然,不用汉字的话完全可以用下面这句)
//Connection connection=DriverManager.getConnection("jdbc:mysql://"+hostip + "/"+DBname,user,passwd);

Statement statement = connection.createStatement();
statement.executeUpdate("INSERT INTO cont1 (content) VALUES ('"+sContent+"')"); //cont1为表,content为字段

%>

这样是解决了问题,但我还是不太明白其中的道理,似乎在tomcat或者apache的服务器配置中还有编码相关的什么东西,我的想法来源于这样一个实施:我在LINUX做的网站,其jdbc链接用的是Connection connection=DriverManager.getConnection("jdbc:mysql://"+hostip + "/"+DBname,user,passwd)这句,用了好长时间都没有出现乱码的现象,某一天我将其一直到一台Windows服务器上,去出现了表单提交后出现乱码的情况。于是我想,这可能不是jsp页面语句的问题,当然,通过jsp页面的设定可以解决这个问题,但总感觉心里不太踏实。

------------------------------------------------------------------------------

另转一片网文(作者的表达能力似乎欠佳,但技术方面还是比较到位的)

让JSP和mysql数据库使用utf-8编码
使用UTF-8其实对于JSP来说
对于在网页常常会需要输入或输出多国语文上
算是一个比较方便的编码
JSP的转码设定其实也不难..只要记得加上去即可
不然JSP内定的编码可不是UTF-8喔

不过可惜的是MySQL至今尚没有完整支援UTF-8
但是可别这样就灰心啰
因为我门可以透过MySQL提供的Connection/J的JDBC介面来存取UTF-8编码的资料
利用JDBC自动转码对我们撰写网页的人是很方便的

好拉!!不多说..马上进入主题
我以下分几个步骤来说明.很少.但都是需要设定的地方而已
只是提出来给大家注意

1.透过JDBC连接MySQL
12
    Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager.getConnection("jdbc:mysql://[hostname]/[database]?user=&password=&useUnicode=true&characterEncoding=utf-8");

红字的地方一定要加入
因为那是唿叫(说唿叫应该可以吧)JDBC利用UTF-8的编码来存取资料
简单的说
就是JSP跟JDBC说....我只要UTF-8.其他免谈....
这样说了解吧^^"

PS:
其实这部分我是建议最少用JSP include的方式来作.比较不会出错
只要需要的时候include近来即可..有问题只要找寻一个档案
不要像我每一个都得去检查有没有错误...
之前的问题就是有一个档案的JDBC编码设定为Big5
害我弄了好多天才找到.....
更进阶的朋友可是试着用JavaBean来控制应该会更简单

2.
网页的部分一定要设定为如下的程式码
1
    <%@ page contentType="text/html;charset=utf-8" %>

是跟JSP跟浏览器(如IE)说我的编码要用UTF-8来显示

而下面这个pageEncoding可加可不加..我是习惯都加啦
不知道会不会有问题
请参考javamon65大大的精辟文章会更了解http://www.javaworld.com.tw/jute/post/view?bid=6&id=27113&sty=2
1
    <%@ page pageEncoding="utf-8" %>


3.
当你用Form传递资料到另一个网页后
那接收资料的编码模式也得设定
不然所接收资料的编码可是使用JSP内定的编码
你看到的都是乱码了
1
    <% request.setCharacterEncoding("utf-8"); %>


4.
相反的.如果你传递资料出去(表单似乎也包含在内.这我不太清楚得请教各位大大)
就必须设定下面的程式码
1
    <% response.setContentType("text/html;charset=utf-8"); %>

告诉Tomcat需要使用UTF-8来处理资料的传递

5.
这也是很重要的一点喔
记得在编辑你的JSP档案后
在储存的时候记得储存成为UTF-8的格式
因为我适用Dreamweaver MX
MX会自动依据ContentType来帮你储存档案所以不用担心
但是你若是用NotePad(记事本)写JSP的话
那就要在档案格式那边选UTF-8的格式来储存啰
否则网页显示出来的一样是乱码
ex:你存成Big5格式来存档.但是网页编码是设定为UTF-8
那JSP跟浏览器连络的时候自然是以UTF-8来处理
所以Big5的格式会变转成UTF-8...当然是乱码啰
所以记得这件很重要的事情

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值