在SQL Server中进行区域设置感知排序

时间:2011-10-15 08:45:54

标签: sql-server database-connection collation

我的基本问题是我有使用数据库的不同语言环境的用户,我希望他们按照原生顺序获取项目。

我的理解是它的工作原理如下:

当我创建数据库时,我需要决定:

  • 字符编码(ISO,Unicode,代码页等):
    这限制了可以将哪些字符放入数据库

  • 物理存储(二进制,UTF-8,UCS16字节序等):
    这是我信任数据库来处理

  • 的事情
  • 平等比较:
    这是必要的,因此独特的约束等在数据库中工作一致。通常我只需要判断不区分大小写(“a”=“A”)和重音符号(è= e)。 语言环境是否重要?

所有这些事情(+默认排序顺序)都是通过为每个字段指定排序规则来设置的(其中默认值来自从实例获取默认值的数据库)

当连接设置到数据库时,登录的语言设置指定日期和数字的显示方式等。

这是我遇到麻烦的地方。 为什么排序顺序不依赖于连接的区域设置?我可以理解,相等比较必须遵循字段规范但排序顺序?

我知道我可以做ORDER BY [Name] COLLATE somecollation但是有几个问题:

  1. 很容易忘记
  2. SQL通常由工具/框架生成
  3. 我如何知道要指定的排序规则?
  4. 你通常如何处理这个问题?客户端排序?

1 个答案:

答案 0 :(得分:0)

数据库排序规则告诉SQL Server如何根据语言公共对待字符。

语言环境是否重要(“a”=“A”)和重音(è= e) 这取决于您的整理设置。如果您的排序规则不区分大小写(CI),则(“a”=“A”)将被视为相同。如果您的校对是不区分重音(ai),则(è= e)将被视为相同

为什么排序顺序不依赖于连接的区域设置? 因为SQL Server必须以某种方式在内部对数据进行排序,并且需要一些指导如何操作(排序规则)。