SQL Server中的区分大小写的记录

时间:2019-02-26 09:29:52

标签: sql sql-server-2012

我使用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”。

为什么会这样,如何解决?

2 个答案:

答案 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