2012-02-02 51 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))