2010-03-17 43 views

回答

80

強制到口音不敏感collation

您還需要確保兩側具有相同的排序規則,以避免錯誤或進一步的強制,如果你想進行比較的表變量或臨時表VARCHAR列

而且由於恆定值將有更新數據庫的歸類:只有局部變量,而不是常量 沒了,甚至沒有那麼

SELECT * 
FROM Venue 
WHERE 
    Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI 
+11

在這種情況下,您不需要提供排序規則兩次:SELECT * FROM Venue WHERE Name Like'%cafe%'COLLATE Latin1_general_CI_AI – PollusB 2014-11-21 15:18:14

+0

@PollusB:true,my bad – gbn 2014-11-26 15:16:13

+0

我實現了此答案,搜索不區分變音,但副作用是我在選擇查詢中缺少一些口音。例如c與急性(U + 0107)。在列屬性中,我看到SQL_Latin1_General_CP1_CI_AI排序規則。我使用以下語句更改了排序規則:ALTER TABLE mytable ALTER COLUMN description varchar(48)COLLATE SQL_Latin1_General_CP1_CI_AI。它以前是Czech_CI_AS排序規則。如果我在答案中使用查詢而不更改列的排序規則,則它在實體框架中不起作用。 – qub1n 2016-11-07 07:39:40

38

通過特定的口音不敏感collation您選擇:

SELECT * 
FROM Venue 
WHERE Name COLLATE Latin1_General_CI_AI Like '%cafe%' COLLATE Latin1_General_CI_AI 

的CI代表「不區分大小寫」和AI爲「不區分重音」。

+6

啊,這就是在結束所有這些愚蠢的字符的意思。我知道這是愚蠢的,但可以幫助一個巨大的數額。不知何故,對我而言,DB整理似乎總是給它帶來大腦迷霧。 – ilivewithian 2010-03-17 11:10:39

0

如果 'A' COLLATE SQL_Latin1_General_CP1_CS_AS = 'A' COLLATE SQL_Latin1_General_CP1_CS_AS SELECT N'Yes' ELSE SELECT N'No」

1

區分重音和重音鈍感搜索可以不要使用Latin1_general_CI_AI

這裏AI是對於不區分重音和AS用於區分重音 即咖啡廳咖啡是,如果不區分重音相同。

在下面的查詢Latin1_general_CI_AI可以分解成以下的部件。

  • latin1使服務器治療字符串中使用的字符集拉丁語1,基本ASCII。

  • CI指定不區分大小寫,所以「ABC」等於「abc」。

  • AI指定不區分重音,所以 'U' 等於 'U'。

查詢應該如下:

SELECT * FROM Venue WHERE Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI 

預期結果如下:

Id name 
1 Café 
2 Cafe