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

时间:2022-07-26 06:00:45
sqlserver + tomcate :
在jsp页面当中执行如下语句
select * from tb_user where user_nm like '%王%'
没有记录,但是在sqlserver当中执行有记录,什么原因?

27 个解决方案

#1


把%改为*试试

#2


STRING S="王";
select * from tb_user where user_nm like '%"+s+"%'

#3


楼上的两位大侠,不行啊

#4


help

#5


贴出相关代码才能发现问题,sql语句没有问题

#6


select * from tb_user where user_nm like '%王%'
你把这句话放到查询分析器里看看,有没有记录

#7


没什么问题啊。

代码贴出来看看。

#8


newste(旭林) :放到查询分析器里,有记录!
1、我把数据库当中的“王”,改成“W”,select * from tb_user where user_nm like '%W%'在jsp页面也有记录;
2、页面代码就是执行一个查询-》显示,没问题,不过在页面开始加了<%@page contentType="text/html;gb2312"%>

#9


在sql语句当中条件如果包含中文,则不显示记录;没有中文,正常

#10


我怀疑是否是数据库中的编码和你在程序中的编码不同。你可以试下在同一个函数内连续执行insert和select试下

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

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

如果能够选出记录的话,说明你在整个project的处理过程中没有统一编码格式。
如果还是选不出的话,可能是你的驱动有问题,换一个试试

#11


我试过你的代码不管是查询分析器里还是jsp里都没有问题,要不把gb2312换成charset=GBK实施

#12


artisthl(清香白莲) :
我真是败了,还是不行!
你那边也是tomvate+sqlserver吗?

#13


转换一下String s= new String(s.getBytes("ISO-8859-1"),"GBK");

#14


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;
}

#15


页面设置为gb2312,
每次将数据保存到数据库中前调用JspToData();在页面显示调用DataToJsp()

#16


happyegg(想转型的程序员) :
如何做到编码统一,并且保证不论保存到数据库还是显示在页面当中的中文信息,都没有乱码情况?

#17


数据库能不能连上的?

#18


有可能是编码的问题,你用的什么编码啊,用 ISO或者 GB2312

#19


我用的也是tomvat+sqlserver

#20


一般来说,只需在每个页面定义统一的编码就行了
<%@ page language="java" contentType="text/html;charset=gb2312" %>

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

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



#21


从数据库到jsp中文不用转换应该没有问题,我就是这样的,而从jsp到数据库要转换

#22


SQL SERVER的JDBC对中文的支持很烂,微软本来就不爽JAVA,所以提供的JDBC写得乱七八糟。

#23


help

#24


sql语句应该对中文进行编码,否则估计不幸的

#25


gz

#26


squares(struts努力学习中 ……) :sql语句我进行了编码转换,也不行啊

#27


很简单,jsp上的编码和数据库数据的编码不同:
你以为你在jsp页面上执行的是select * from tb_user where user_nm like '%王%';
但实际应该执行的是select * from tb_user where user_nm like '%???%';
???是中文编码转码时出现的乱码。

#1


把%改为*试试

#2


STRING S="王";
select * from tb_user where user_nm like '%"+s+"%'

#3


楼上的两位大侠,不行啊

#4


help

#5


贴出相关代码才能发现问题,sql语句没有问题

#6


select * from tb_user where user_nm like '%王%'
你把这句话放到查询分析器里看看,有没有记录

#7


没什么问题啊。

代码贴出来看看。

#8


newste(旭林) :放到查询分析器里,有记录!
1、我把数据库当中的“王”,改成“W”,select * from tb_user where user_nm like '%W%'在jsp页面也有记录;
2、页面代码就是执行一个查询-》显示,没问题,不过在页面开始加了<%@page contentType="text/html;gb2312"%>

#9


在sql语句当中条件如果包含中文,则不显示记录;没有中文,正常

#10


我怀疑是否是数据库中的编码和你在程序中的编码不同。你可以试下在同一个函数内连续执行insert和select试下

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

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

如果能够选出记录的话,说明你在整个project的处理过程中没有统一编码格式。
如果还是选不出的话,可能是你的驱动有问题,换一个试试

#11


我试过你的代码不管是查询分析器里还是jsp里都没有问题,要不把gb2312换成charset=GBK实施

#12


artisthl(清香白莲) :
我真是败了,还是不行!
你那边也是tomvate+sqlserver吗?

#13


转换一下String s= new String(s.getBytes("ISO-8859-1"),"GBK");

#14


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;
}

#15


页面设置为gb2312,
每次将数据保存到数据库中前调用JspToData();在页面显示调用DataToJsp()

#16


happyegg(想转型的程序员) :
如何做到编码统一,并且保证不论保存到数据库还是显示在页面当中的中文信息,都没有乱码情况?

#17


数据库能不能连上的?

#18


有可能是编码的问题,你用的什么编码啊,用 ISO或者 GB2312

#19


我用的也是tomvat+sqlserver

#20


一般来说,只需在每个页面定义统一的编码就行了
<%@ page language="java" contentType="text/html;charset=gb2312" %>

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

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



#21


从数据库到jsp中文不用转换应该没有问题,我就是这样的,而从jsp到数据库要转换

#22


SQL SERVER的JDBC对中文的支持很烂,微软本来就不爽JAVA,所以提供的JDBC写得乱七八糟。

#23


help

#24


sql语句应该对中文进行编码,否则估计不幸的

#25


gz

#26


squares(struts努力学习中 ……) :sql语句我进行了编码转换,也不行啊

#27


很简单,jsp上的编码和数据库数据的编码不同:
你以为你在jsp页面上执行的是select * from tb_user where user_nm like '%王%';
但实际应该执行的是select * from tb_user where user_nm like '%???%';
???是中文编码转码时出现的乱码。