sql-server - sql server 中的语言环境感知排序

我的基本问题是,我有使用数据库的不同区域设置的用户,我希望他们按本地顺序对项目进行排序。

我的理解是它是这样工作的:

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

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

  • 物理存储(二进制、UTF-8、UCS16 字节顺序等):
    这是我相信数据库会处理的事情

  • 平等比较:
    这是必要的,以便唯一约束等在数据库中保持一致。通常我只需要决定不区分大小写(“a”=“A”)和重音(è=e)。 语言环境在这里很重要吗?

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

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

这就是我遇到麻烦的地方。 为什么排序顺序不依赖于连接的语言环境?我能理解相等比较必须遵循字段规范但排序顺序?

我知道我可以执行 ORDER BY [Name] COLLATE somecollat​​ion 但是这有几个问题:

  1. 很容易忘记
  2. SQL 通常由工具/框架生成
  3. 我怎么知道要指定什么排序规则?

你通常如何处理这个问题?客户端排序?

最佳答案

数据库排序规则告诉 SQL Server 如何根据通用语言处理字符。

区域设置在这里很重要 ("a"= "A") 和重音 (è = e) 这取决于您的排序规则设置。如果您的排序规则不区分大小写 (CI),则 ("a"= "A") 将被视为相同。如果您的排序规则不区分重音 (ai),则 (è = e) 将被视为相同 (ai)

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

https://stackoverflow.com/questions/7776777/

相关文章:

python - 从 cx_Oracle 内部使用 SQL*PLUS COPY?

macos - 如何判断 NSWorkspaceWillPowerOffNotification 是

sql-server - 获取表列的创建日期

google-search-api - 如何以编程方式获取 Google SEO/搜索排名信息? A

visual-studio - 更改远程桌面键盘快捷方式

visual-studio-2010 - Intellisense 将 .c 文件视为 .cpp

xml - 如何使用受控词汇表或分类法来定义 XML 元素名称或属性名称?

ruby-on-rails - rails 不见了

java - 性能 : com. sun.net.httpserver.HttpServer 与 j

.net - 如何获取 ASMX 生成的 WSDL soap :address to use htt