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”等记录一同查询出来,如何解决这个问题?请各位大侠不吝赐教!! 展开
String hql=” from User user where user.loginname='hzhc' ”;
List list=session.CreateQuery(hql).list();
这样的话就会把用户名为“Hzhc”、“HzHc”等记录一同查询出来,如何解决这个问题?请各位大侠不吝赐教!! 展开
1个回答
展开全部
这跟程序应该没有直接的关系,你把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"')
给你推荐几种方式.
一,设置列属性方式
--区分大小写
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"')
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询