[英]Case sensitive record in SQL Server
我使用 SQL Server 2012。數據庫排序規則是“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'。
為什么會發生這種情況,如何解決?
在 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
在丹麥語排序規則中, aa
是單個字符,而aA
被解釋為兩個字符(無論排序規則是否區分大小寫)。
如果可行,您可以用大寫進行比較:
WITH cte AS
(
select 'MariaA' as username
)
SELECT * from cte where UPPER(username)=UPPER('Mariaa') COLLATE Danish_Norwegian_CI_AS
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.