PostgreSQL中de-DE-u-kn-true排序规则各部分含义是什么?
PostgreSQL ICU排序规则
de-DE-u-kn-true各字段含义 你创建自定义排序规则的语句如下:
CREATE COLLATION de_pos (LOCALE = 'de-DE-u-kn-true', PROVIDER = 'icu');
其中LOCALE参数值de-DE-u-kn-true遵循ICU的BCP 47区域标签规范,你询问的三个字段含义如下:
u:Unicode扩展标识前缀,作用是标记后续字段属于Unicode排序算法的自定义扩展属性,和基础区域配置做区分。所有需要调整ICU排序行为的自定义参数,都需要以-u-开头拼接在基础区域标识之后。kn:是numeric ordering(数字排序)的属性缩写,是Unicode排序扩展提供的功能开关,作用是指定排序时是否将字符串中连续的数字字符识别为完整数值做大小比较,而非逐字符比对字符编码值。true:是kn属性的取值,代表开启数字排序功能。如果取值为false则关闭该功能,也是ICU排序的默认行为——也就是你未使用自定义规则时,1.2.20排在1.2.100之后的原因:逐字符比对时100的第二位字符0的编码值小于20的第二位字符2。
补充说明:你实现的自然排序效果核心来自
kn=true配置,和de-DE德语区域设置没有强关联,如果不需要适配德语特殊字符排序,可以使用通用区域标识und-u-kn-true实现同样的数值自然排序效果。
内容的提问来源于stack exchange,提问作者Dominik
相关产品推荐
相关产品推荐

