sql语句当中条件包含中文的奇怪问题

xingangwang 2004-10-10 03:31:31
sqlserver + tomcate :
在jsp页面当中执行如下语句
select * from tb_user where user_nm like '%王%'
没有记录,但是在sqlserver当中执行有记录,什么原因?
...全文
223 点赞 收藏 27
写回复
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
samsult 2004-10-11
很简单,jsp上的编码和数据库数据的编码不同:
你以为你在jsp页面上执行的是select * from tb_user where user_nm like '%王%';
但实际应该执行的是select * from tb_user where user_nm like '%???%';
???是中文编码转码时出现的乱码。
回复
xingangwang 2004-10-11
squares(struts努力学习中 ……) :sql语句我进行了编码转换,也不行啊
回复
Chinatosun 2004-10-11
gz
回复
squares 2004-10-11
sql语句应该对中文进行编码,否则估计不幸的
回复
xingangwang 2004-10-11
help
回复
cafem 2004-10-10
SQL SERVER的JDBC对中文的支持很烂,微软本来就不爽JAVA,所以提供的JDBC写得乱七八糟。
回复
从数据库到jsp中文不用转换应该没有问题,我就是这样的,而从jsp到数据库要转换
回复
happyegg 2004-10-10
一般来说,只需在每个页面定义统一的编码就行了
<%@ page language="java" contentType="text/html;charset=gb2312" %>

如果还是有问题,可以考虑在显示的时候进行编码转换:
new String(viewBean.getYourValue().getBytes(Util.getBrowserEncoding()));

Util.getBrowserEncoding()拿出"gb2312"或者"UTF-8"等编码字符



回复
我用的也是tomvat+sqlserver
回复
jein 2004-10-10
有可能是编码的问题,你用的什么编码啊,用 ISO或者 GB2312
回复
weipj007 2004-10-10
数据库能不能连上的?
回复
xingangwang 2004-10-10
happyegg(想转型的程序员) :
如何做到编码统一,并且保证不论保存到数据库还是显示在页面当中的中文信息,都没有乱码情况?
回复
xingangwang 2004-10-10
页面设置为gb2312,
每次将数据保存到数据库中前调用JspToData();在页面显示调用DataToJsp()
回复
xingangwang 2004-10-10
happyegg(想转型的程序员) :
我就是没有统一编码格式,数据保存到数据库中,中文变成了????,我就加了连个函数:
//将数据库中的中文字符显示到jsp页面
public String DataToJsp(String str)
{
String tpStr="";
try
{
tpStr=new String(str.getBytes("gb2312"),"ISO-8859-1");

}
catch(Exception e)
{
System.out.println(e.getMessage());
}
return tpStr;
}

//将jsp页面中的中文信息保存到数据库中
public String JspToData(String str)
{
String tpStr="";
try
{
tpStr=new String(str.getBytes("ISO-8859-1"),"gb2312");

}
catch(Exception e)
{
System.out.println(e.getMessage());
}
return tpStr;
}
回复
angel7532 2004-10-10
转换一下String s= new String(s.getBytes("ISO-8859-1"),"GBK");
回复
xingangwang 2004-10-10
artisthl(清香白莲) :
我真是败了,还是不行!
你那边也是tomvate+sqlserver吗?
回复
我试过你的代码不管是查询分析器里还是jsp里都没有问题,要不把gb2312换成charset=GBK实施
回复
happyegg 2004-10-10
我怀疑是否是数据库中的编码和你在程序中的编码不同。你可以试下在同一个函数内连续执行insert和select试下

insert into tb_user values('王小二'); //根据你的表字段来添加

select * from tb_user where user_nm like '%王%';

如果能够选出记录的话,说明你在整个project的处理过程中没有统一编码格式。
如果还是选不出的话,可能是你的驱动有问题,换一个试试
回复
xingangwang 2004-10-10
在sql语句当中条件如果包含中文,则不显示记录;没有中文,正常
回复
xingangwang 2004-10-10
newste(旭林) :放到查询分析器里,有记录!
1、我把数据库当中的“王”,改成“W”,select * from tb_user where user_nm like '%W%'在jsp页面也有记录;
2、页面代码就是执行一个查询-》显示,没问题,不过在页面开始加了<%@page contentType="text/html;gb2312"%>
回复
发动态
发帖子
Web 开发
创建于2007-09-28

7.9w+

社区成员

Java Web 开发
申请成为版主
社区公告
暂无公告