postgresql – 如何为国际数据库选择排序规则?

postgresql – 如何为国际数据库选择排序规则?,第1张

概述我正在设计一个以不同语言存储数据的数据库(使用UTF-8),所以我认为显示查询结果的最佳方法是在查询本身( because there are more than one correct ways to do that)期间根据用户的语言对其进行排序,如下所示: SELECT a < b COLLATE "de_DE" FROM test1; 假设这是使用国际数据的正确方法,这是数据库本身的最佳排 我正在设计一个以不同语言存储数据的数据库(使用UTF-8),所以我认为显示查询结果的最佳方法是在查询本身( because there are more than one correct ways to do that)期间根据用户的语言对其进行排序,如下所示:
SELECT a < b ColLATE "de_DE" FROM test1;

假设这是使用国际数据的正确方法,这是数据库本身的最佳排序规则? PostgreSQL documentation says:

The C and POSIX collations both specify “Traditional C” behavior,in which only the ASCII letters “A” through “Z” are treated as letters,and sorting is done strictly by character code byte values.

我认为这是这种情况下的最佳选择,还是我错了?

(加分问题:在查询本身中选择排序规则是否太慢?).

C collation是正确的选择.

没有语言环境,一切都快一点.并且由于无论如何都没有正确的排序规则,因此无需整理即可创建数据库,这意味着使用C.

为许多 *** 作提供整理可能是一种痛苦.但是,默认排序规则和临时排序规则之间的速度不应该有明显的差异.毕竟它只是未排序的数据,并且在排序时应用排序规则.

请注意,Postgres基于底层 *** 作系统提供的语言环境设置,因此您需要为每个要使用的语言环境生成语言环境.更多关于SO here和here的相关答案.

但是,如@Craig already mentioned所示,索引是此方案的瓶颈.在许多涉及字符数据的情况下,索引的排序规则必须与应用运算符的排序规则相匹配.

您可以使用索引中的ColLATE说明符来生成匹配的索引.如果要在同一个表中混合数据,Partial indexes可能是完美的选择.

例如,包含国际字符串的表:

CREATE table string (   string_ID serial,lang_ID   int NOT NulL,string    text NOT NulL);

而且你最常对一种语言感兴趣:

SELECT *FROM   stringWHERE  lang_ID = 5  -- 5 being German / Germany hereAND    string > 'foo' ColLATE "de_DE"ORDER  BY string ColLATE "de_DE";

然后创建部分索引,如:

CREATE INDEX string_string_lang_ID_IDx ON string (string ColLATE "de_DE")WHERE lang_ID = 5;

每种语言都需要一个.

实际上,对于像这样的表格来说,inheritance可能是一种优越的方法.然后,您可以在每个继承的表上包含一个普通索引,该索引仅包含单个语言环境的字符串.当然,您需要熟悉继承表的特殊规则.

总结

以上是内存溢出为你收集整理的postgresql – 如何为国际数据库选择排序规则?全部内容,希望文章能够帮你解决postgresql – 如何为国际数据库选择排序规则?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1167191.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存