【问题标题】:SQL Server collation case-sensitivitySQL Server 排序规则区分大小写
【发布时间】:2014-05-10 17:45:12
【问题描述】:

我需要确定 SQL 2012 中数据库的排序规则,并从中提取区分大小写。我该怎么做? 在我知道拼写区分大小写后,我需要在 C# 中使用它。 SQL Server 排序规则区分大小写和 C# 之间是否存在映射关系?

【问题讨论】:

标签: c# sql sql-server


【解决方案1】:

您的问题存在根本缺陷,因为它将排序规则的所有特征都降低为仅区分大小写。在这个假设上写代码会导致代码不正确,我只有两个字加两个:Turkish I。为了正确起见,您必须在 C# 代码中使用与数据库中的排序规则相同的排序规则,而不是简单地使用 ToLowerCase() 或 ToUpperCase()。

请问如何映射到C#

鉴于 SQL Server 支持的排序规则列表是已知且固定的(对于每个版本),我建议将 SQL 返回的collation name 映射硬编码为C# culture name。您只需构建一次列表,构建起来相当容易。您需要以某种方式处理可能附带新排序规则的 SQL Server 未来版本。

请注意(再次...)您要解决的问题绝非微不足道。 SQL Server persists 使用给定排序规则的数据,这使得无法更改排序规则(如果排序规则说 A 在 B 之后排序并且数据被保存,那么将排序规则更改为 A 在 B 之前排序将导致数据读取持久数据时损坏,相等比较,考虑外键,唯一和检查约束等)。但是,平台 (Windows)确实不时地更改排序规则设置,通常是为了修复现有排序规则中的错误。您的 C# 文化将使用 当前 平台排序规则,这可能与 SQL 在 2008 年为相同排序规则捕获的内容不同。那座桥下有许多龙...

【讨论】:

    【解决方案2】:

    SQL Server 排序规则区分大小写和 C# 之间是否存在映射关系?

    是的,鉴于:

    http://technet.microsoft.com/en-us/library/ms174396.aspx

    用于具有默认排序规则的属性。

    所以,有一个映射。只是没有您可能想要的简单属性。

    虽然没有相关性 - SQL Server 映射非常复杂。名字比较是最好的选择。

    【讨论】:

      猜你喜欢
      • 2011-05-11
      • 2011-03-18
      • 2011-06-01
      • 2015-05-09
      • 1970-01-01
      • 2019-06-19
      • 2012-06-26
      • 2012-12-18
      • 1970-01-01
      相关资源
      最近更新 更多