区分大小写
在对 ASCII 字符串进行排序时,默认情况下字符串的字母顺序是区分大小写的。如果需要按照不区分大小写的字符比较来对行进行排序,即相同位置的大小写字母排序相同,则可以在数据库模式中的索引定义上使用 case_insensitive 或 ignore_case 关键字。
例如,要在模式文件中声明字符串字段 name 上的索引 by_name 使用不区分大小写的比较,请使用如下声明:
tree<name case_insensitive asc> by_name;
或
tree<name ignore_case asc> by_name;
另外,对于 SmartEDB 源代码授权用户,MCO_CFG_SUPPORT_CASE_INSENSITIVE_CHAR_CMP 配置选项可在目标/mcolib/mcocfg.h 中以 C 预处理器定义的形式获取。其默认值为 1。如果在 SmartEDB 构建中将其值更改为 0,那么所有索引都将使用区分大小写的比较,无论它们在模式文件中是否使用 case_insensitive 关键字声明;也就是说,对 MCO_CFG_SUPPORT_CASE_INSENSITIVE_CHAR_CMP 常量的这种重新定义将覆盖 case_insensitive 关键字的效果。
需要明确的是,以下设置会产生所述结果:
MCO_CFG_SUPPORT_CASE_INSENSITIVE_CHAR_CMP 值 | 模式声明 | 索引比较结果 |
---|---|---|
定义为 1(默认值) | 无 case_insensitive | 区分大小写 |
定义为 1(默认值) | 有 case_insensitive | 不区分大小写 |
重新定义为 0(特殊构建) | 无 case_insensitive | 区分大小写 |
重新定义为 0(特殊构建) | 有 case_insensitive | 区分大小写 |
目标代码被许可方可以向 McObject 支持部门请求 SmartEDB 库的特殊构建版本。