我使用SQL Server2012。数据库排序规则为“ CI”(不区分大小写)。从aspnet_users中选择时,用户名不区分大小写。但是,表中的某些单个记录似乎仍然区分大小写,我不明白为什么。
示例:我有一个记录,用户名为“ MariaA”。
此select语句返回正确的记录:
SELECT [UserName] FROM [aspnet_Users] where UserName = 'MariaA'
此select语句还返回正确的记录:
SELECT [UserName] FROM [aspnet_Users] where UserName = 'mariaA'
如果我运行此语句,则不会返回用户:
SELECT [UserName] FROM [aspnet_Users] where UserName = 'Mariaa'
如果我运行此语句,则不会返回用户:
SELECT [UserName] FROM [aspnet_Users] where UserName = 'mariaa'
问题:似乎大写字母“ A”区分大小写。所有其他字符均不区分大小写。当用户名包含大写字母“ A”时,其他用户配置文件也会出现此问题,无法将其写为小写字母“ a”。
为什么会这样,如何解决?
答案 0 :(得分:1)
在where子句中使用COLLATE SQL_Latin1_General_CP1_CS_AS
WITH cte AS
(
select 'MariaA' as username
) select * from cte where username='mariaA' COLLATE SQL_Latin1_General_CP1_CS_AS
默认情况下,它不区分大小写
因此下面的查询将返回与之匹配的行
WITH cte AS
(
select 'MariaA' as username
) select * from cte where username='MariaA' COLLATE SQL_Latin1_General_CP1_CS_AS
答案 1 :(得分:0)
在丹麦归类中,aa
是单个字符,而aA
被解释为两个字符(不管归类是否区分大小写)。
如果可行,可以使用大写字母进行比较:
WITH cte AS
(
select 'MariaA' as username
)
SELECT * from cte where UPPER(username)=UPPER('Mariaa') COLLATE Danish_Norwegian_CI_AS