为什么ADS中没有NVarCiChar字段类型?

时间:2012-09-28 11:34:11

标签: advantage-database-server

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

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

我知道WHERE field = 'HeLlO WoRlD' COLLATE ads_default_ci有效,但每次比较都不能做到这一点。

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

1 个答案:

答案 0 :(得分:2)

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

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