我的基本问题是我有使用数据库的不同语言环境的用户,我希望他们按照原生顺序获取项目。
我的理解是它的工作原理如下:
当我创建数据库时,我需要决定:
字符编码(ISO,Unicode,代码页等):
这限制了可以将哪些字符放入数据库
物理存储(二进制,UTF-8,UCS16字节序等):
这是我信任数据库来处理
平等比较:
这是必要的,因此独特的约束等在数据库中工作一致。通常我只需要判断不区分大小写(“a”=“A”)和重音符号(è= e)。 语言环境是否重要?
所有这些事情(+默认排序顺序)都是通过为每个字段指定排序规则来设置的(其中默认值来自从实例获取默认值的数据库)
当连接设置到数据库时,登录的语言设置指定日期和数字的显示方式等。
这是我遇到麻烦的地方。 为什么排序顺序不依赖于连接的区域设置?我可以理解,相等比较必须遵循字段规范但排序顺序?
我知道我可以做ORDER BY [Name] COLLATE somecollation
但是有几个问题:
你通常如何处理这个问题?客户端排序?
答案 0 :(得分:0)
数据库排序规则告诉SQL Server如何根据语言公共对待字符。
语言环境是否重要(“a”=“A”)和重音(è= e) 这取决于您的整理设置。如果您的排序规则不区分大小写(CI),则(“a”=“A”)将被视为相同。如果您的校对是不区分重音(ai),则(è= e)将被视为相同
为什么排序顺序不依赖于连接的区域设置? 因为SQL Server必须以某种方式在内部对数据进行排序,并且需要一些指导如何操作(排序规则)。