2012-02-02 90 views
2

我有一個CI默認排序規則(French_CI_AS如何使用不區分大小寫排序的數據庫對外鍵區分大小寫?

在此歸類,SQL Server將做我的外鍵不區分大小寫的檢查,這是有道理的數據庫,而是害我不少問題,主要是因爲字符串比較不會有我的數據庫層,在我的應用程序層

相同的行爲我可能已經得到約二十varchar的PK和數百FKS的那些varchar的PK(沒錯,我知道只用bigint爲的PK本來可以避免這個問題,但是從varcharbigint不是這裏的選項)

解決此問題的最簡單方法是什麼?我正在使用SQL Server 2008.

+1

你不能。如果數據庫歸類不區分大小寫,那麼所有比較(由FK-> PK鏈接使用)都不區分大小寫......沒有「魔術」來改變....和**是** - 使用'varchar '因爲PK是一個非常糟糕的主意** - 這只是你不應該使用'varchar'作爲PK的衆多原因之一..... – 2012-02-02 17:47:19

+0

列定義中的COLLATE不會有幫助嗎? 'CREATE TABLE ... column_name COLLATE collat​​ion_name'? – 2012-02-02 17:56:47

+0

@marc_s:當然可以。例如,我可以將整個detabase的排序規則更改爲區分大小寫。我只是試圖儘可能無痛地找到實現我最初的目標的方法...... – Brann 2012-02-02 18:56:27

回答

3

您可以嘗試將列的排序規則更改爲區分大小寫,但是當您在聯接中使用它時,則需要將列(或其他列排列到相同的排版規則)或比較。

+0

實際上,SQL Server將要求外鍵列和引用列是相同的排序規則,因此不應該爲連接執行轉換。 – mdisibio 2013-08-20 20:11:13

0

無論何時比較字段,您都可以將pk和fk轉換爲varbinary(varchar length)。

喜歡的東西:

Where CAST(yourPK As VarBinary(20)) = CAST(yourFK As VarBinary(20))