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