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

xingangwang 2004-10-10 03:31:31
sqlserver + tomcate :
在jsp页面当中执行如下语句
select * from tb_user where user_nm like '%王%'
没有记录,但是在sqlserver当中执行有记录,什么原因?
...全文
402 27 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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写得乱七八糟。
成都清香白莲 2004-10-10
  • 打赏
  • 举报
回复
从数据库到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"等编码字符



成都清香白莲 2004-10-10
  • 打赏
  • 举报
回复
我用的也是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吗?
成都清香白莲 2004-10-10
  • 打赏
  • 举报
回复
我试过你的代码不管是查询分析器里还是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"%>
加载更多回复(7)

81,122

社区成员

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

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