1

我想知道为什么 ADS 中没有不区分大小写的 Unicode 字符字段类型?

虽然您可以将 NVarChar 字段的索引排序规则设置为不区分大小写,但使用简单查询WHERE field = 'HeLlO WoRlD'找不到值'Hello World'

我知道这WHERE field = 'HeLlO WoRlD' COLLATE ads_default_ci行得通,但对每一次比较都这样做不是一种选择。

CiChar 字段类型不支持 Unicode(除非您在其中存储 UTF-8 字符串会导致其他问题)。

4

1 回答 1

2

从根本上说,与常规字符字段不同,Unicode 可以存储所有语言的字符,因此没有特定的排序规则/语言与之关联。排序规则来自于它的使用、索引或排序方式。如果要定义 NVarCiChar 字段,则需要将语言/区域设置(英语与法语或德语区分大小写)与此类字段类型相关联,这会给系统带来不必要的复杂性(当英语 ci field 是与德语 ci 字段进行比较)。

尽管 ciChar 类型在某些方面更易于使用,但它也有缺点。主要是它不是标准的,因此它不能移植到其他数据库,并且需要在代码中进行一些特殊处理。它不太灵活。尝试将 ciChar 字段与常规 char 字段进行比较时会导致问题——这种比较需要 COLLATE 子句。由于比较标准的使用 COLLATE 子句的方式支持不区分大小写的比较,以更清晰的方式同时更灵活,我们决定不区分大小写的 Unicode 字段是不必要的。通过为 SQL 语句句柄指定不区分大小写的 Unicode 排序规则来避免使用多个 COLLATE 子句,还可以轻松地对 Unicode 字符串进行不区分大小写的比较。

于 2012-09-28T16:02:13.133 回答