请教mysql数据库中保存的问题

zsbs 2003-03-26 10:40:01
我使用的是mysql数据库,我的服务器是win2000,tomact

<%@ page contentType="text/html;charset=GB2312"%>
....
String tt=request.getParameter("tt");
tt=new String(tt.getBytes("ISO8859-1"),"GB2312");
....
SQL语句是
"insert into table1(fie) values('"+tt+"')";

变量tt的值是中文时,运行后,为什么只能保存为空记录,
如果变量tt的值是英文或者不使用
tt=new String(tt.getBytes("ISO8859-1"),"GB2312");
可以保存,但中文保存为乱码,我把这句sql代码在mysql控制台运行,能够正常保存


同样的代码,我在另一台win2000+tomact的电脑上能正常运行
而且有些应当要用new String(tt.getBytes("ISO8859-1"),"GB2312");
的地方,不使用这个函数也能正常显示和保存中文记录

我实在不明白这是为什么,请指教

...全文
88 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsbs 2003-04-23
  • 打赏
  • 举报
回复
终于解决了,原因是mysql的jdbc高版本有bug,换用低版本就好了
icecloud 2003-03-29
  • 打赏
  • 举报
回复
给你看我的保存代码:已经测试通过,完全没问题,不过我用的都是UTF-8

1. 保存时候用,仅用于数据库,之前处理输入时候要加上request.setCharacterEncoding("UTF-8");
public String encodeString(String s) {
try {
String b = new String(s.getBytes("UTF-8"), "ISO8859_1");
b = b.replaceAll("'","''");
String enter = "<br/>";
b = b.replaceAll("&", "&");
b = b.replaceAll("<", "<");
b = b.replaceAll(">", ">");
b=b.replaceAll("\r\n",enter);
return b;
}
catch (Exception e) {
return s;
}
}

2. 显示用:
//在每jsp叶面include
<%!

String getStr(String str){
try{
if(str!=null){
if (str.trim().equals("")||str.trim().equals("null")){
return "";
}else{
String b1=new String(str.getBytes("ISO-8859-1"),"UTF-8");
return b1;
}
}
else{
return "";
}}
catch(Exception e){
System.err.println("getStr Error:"+str+"/"+e.getMessage());
return "";
}

}
%>
3.每页要加上:
<%@ page contentType="text/html; charset=UTF-8" %>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
icecloud 2003-03-29
  • 打赏
  • 举报
回复
另外
String tt=request.getParameter("tt");
tt=new String(tt.getBytes("ISO8859-1"),"GB2312");

此处最好指定一下request的编码
request.setCharacterEncoding("UTF-8");
icecloud 2003-03-29
  • 打赏
  • 举报
回复
tt=new String(tt.getBytes("ISO8859-1"),"GB2312");
可以保存,但中文保存为乱码,我把这句sql代码在mysql控制台运行,能够正常保存

保存成乱码没问题,那是因为2者编码不同
只要你把那乱码读出来用
tt=new String(tt.getBytes("GB2312"),"ISO8859-1");
转回来就行了
iyoungandican 2003-03-28
  • 打赏
  • 举报
回复
经验不是很多,无能为力,

建议你缩小可能错误的范围,
或检查执行的过程,就象编程中的"断点"一样,
zsbs 2003-03-28
  • 打赏
  • 举报
回复
我把整个win2000系统重新安装了,还是这样,真他妈奇怪了
我能正运行的电脑是方正,不能正常运行的电脑是HP
iyoungandican 2003-03-27
  • 打赏
  • 举报
回复
在数据库源加参数试试:
useUnicode=true&characterEncoding=8859_1

eg.
String DbSource ="jdbc:mysql://localhost:3306/myDB?useUnicode=true&characterEncoding=8859_1";
String username="username";
String password="password";

Connection conn = DriverManager.getConnection(DbSource,username,password);
zsbs 2003-03-27
  • 打赏
  • 举报
回复
我试过以上方法,也试过用resin都与原来的一样,
实在没有办法了,请高手帮忙
zsbs 2003-03-26
  • 打赏
  • 举报
回复
试过了,没用的
iyoungandican 2003-03-26
  • 打赏
  • 举报
回复
改为:
new String(tt.getBytes("gb2312"),"ISO8859_1");

在从数据库取数时再转换:
new String(str.getBytes("ISO8859_1"),"gb2312");
zsbs 2003-03-26
  • 打赏
  • 举报
回复
我现在是转换了反而不能保存中文,只能存入空字段;
不转换倒还有乱码能保存,真怪
andypro2 2003-03-26
  • 打赏
  • 举报
回复
我以前也遇到过很怪的情况,同样都是win2000pro+tomcat3.2.3,在一台电脑上不用new String(...转换,中文是正常的,但是在另外一台电脑上必须转换才正常,不知什么原因。
但一般来说,用tomcat+mysql是不需要转换的。

81,092

社区成员

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

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