如何解决mysql乱码问题

问题是这样的,我用struts来做一个用户注册的界面,其中username和sex这2个字段是需要中文的

但是我在Action调用UserDao来进行插入用户类的时候,发生了乱码的问题


1.从jsp页面上(gb2312的页面)上传到Action类的UserForm的值应该是乱码的,这时候我们要做第一步的转换编码

2.从Action类调用UserDao来进行对数据库的数据插入时,我们也需要首先设定数据库的编码格式,否则也会出现乱码

解决方法一:

1.首先在UserDao中增加一个编码转换的函数bx

public String bx(String str) {
try {
byte b[] = str.getBytes("iso-8859-1");
str
= new String(b);
}
catch (Exception e) {
}
return str;
}

2.在获取中文之后,因为中文是乱码的,必须把编码弄成iso-8859-1才能正常显示中文,所以在插入数据库之前,

要把需要转换的中文利用bx函数进行转换

ps = con.prepareStatement("insert into users(name,password,adds,sex,email,age,times) values(?,?,?,?,?,?,?)");

ps.setString(
1, bx(uf.getName()));
ps.setString(
2, uf.getPassword());
ps.setString(
3, bx(uf.getAdds()));
ps.setString(
4, bx(uf.getSex()));
ps.setString(
5, uf.getEmail());
ps.setString(
6, uf.getAge());
ps.setString(
7, ts);

3.修改连接字符串url

String url = "jdbc:mysql://localhost:3306/" + dbname+"?useUnicode=true&characterEncoding=gbk";

增加"?useUnicode=true&characterEncoding=gbk"增加这一串代码,主要是设定数据库的编码格式为gbk,记得是小写

4.数据库是什么编码不重要,重要的是存储中文的字段的编码必须是gb2312,因为这样才能存储中文

注意name的Column Charset是gb2312 ,sex和adds字段同理,把Column Charset改为gb2312

解决方法二:

1.因为在jsp页面传递到ActionForm的时候,中文已经是乱码的,所以我们可以在ActionForm中的reset函数直接就把编码设置为GBK

public void reset(ActionMapping mapping, HttpServletRequest request) {
try {
request.setCharacterEncoding(
"GBK");
}
catch (Exception e) {
// TODO: handle exception
}
}

2.修改连接字符串url

String url = "jdbc:mysql://localhost:3306/" + dbname+"?useUnicode=true&characterEncoding=gbk";

增加"?useUnicode=true&characterEncoding=gbk"增加这一串代码,主要是设定数据库的编码格式为gbk,记得是小写

3.数据库是什么编码不重要,重要的是存储中文的字段的编码必须是gb2312,因为这样才能存储中文

注意name的Column Charset是gb2312 ,sex和adds字段同理,把Column Charset改为gb2312

通过以上2种方法其中之一都可以实现mysql乱码的解决,记住步骤

1.转换乱码为中文

2.url修改,数据库编码格式为gbk

3.中文字段必须为中文编码

posted @ 2011-01-11 22:25  李只蚊  阅读(649)  评论(0编辑  收藏  举报