簡體   English   中英

SQL Server 中區分大小寫的記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM