HQL语句 查询时如何区分大小写? 10

如:Stringhql=”fromUseruserwhereuser.loginname='hzhc'”;Listlist=session.CreateQuery(hql... 如:
String hql=” from User user where user.loginname='hzhc' ”;
List list=session.CreateQuery(hql).list();

这样的话就会把用户名为“Hzhc”、“HzHc”等记录一同查询出来,如何解决这个问题?请各位大侠不吝赐教!!
展开
 我来答
heruyi
2009-04-15 · TA获得超过558个赞
知道小有建树答主
回答量:197
采纳率:0%
帮助的人:174万
展开全部
这跟程序应该没有直接的关系,你把hibernate生成的sql语句打印出来,到sql查询分析器里运行应该也是不区分大小写的,这是跟你的数据库配置或者在建表的时候的设置有直接关系.
给你推荐几种方式.
一,设置列属性方式
--区分大小写
create table tbl
(
f1 varchar(10) collate chinese_prc_cs_as --区分大小写
)
--不区分大小写
create table tbl
(
f1 varchar(10) collate chinese_prc_ci_as --不区分大小写
)

insert into tbl values('abc');
insert into tbl values('Abc');
insert into tbl values('ABC');

select * from tbl where f1 = 'abc'

如果采用不区分大小写的字段属性,则结果是
abc
Abc
ABC

如果采用区分大小写的字段属性,则结果是
abc

二,直接针对db的
--区分大小写
alter database dbname collate chinese_prc_cs_as

--不区分大小写
alter database dbname collate chinese_prc_ci_as

三,查询时来转换

select * from tbl where convert(varbinary, f)=convert(varbinary, N'ABC')

四,数据库安装设置时就处理
这样数据库名,用户,表名,字段等都区分了

五,自己写函数来处理
不过这样效率较差,因为一般方法是逐个字符按照ascii编码比较

六,采用contains胃词
一般情况我们都是用
select * from table1 where t1='xx'
这种是不区分大小写的,下面这种大小写敏感,这需要在该表建立全文索引才能使用.
select * from table1 where contains(t1,'"xx"')
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式