非英语语言的en_us.UTF8校对

时间:2015-10-03 22:19:13

标签: postgresql utf-8 cpanel collation phppgadmin

我在使用MySQL工作了一段时间之后,第一次尝试PostgreSQL数据库。我的环境是cPanel和phpPgAdmin的共享托管。令我困惑的一件事是数据库整理。我托管的cPanel始终会创建数据库,rdd.cacheEncodingCollation设置为Character TypeUTF8en_US.UTF-8分别。我似乎没有办法改变它,因为数据库是通过cPanel创建的,那里没有选项,根据这个答案,这些参数只能通过重新创建所需的数据库来改变设置。

所以我想知道:它真的重要吗?如果排序规则设置为en_us.UTF8,那么非英语甚至非拉丁语字符串会发生什么,例如俄语或希伯来语?它们将如何分类?

更新:我感到困惑,因为在MySQL中,我过去只选择utf8mb4_unicode_ci整理,而不关心特定语言。我想知道它与PostgreSQL中特定于国家语言的排序规则相比如何运作。

1 个答案:

答案 0 :(得分:2)

归类行为将取决于底层操作系统的语言环境支持。总的来说,我认为你应该公平地期待" dumb"对于当前语言环境之外的字符,可能通过Unicode代码点进行排序。可能是default collatoin for the unicode collation algorithm

我很难快速找到整理不同的样本数据,以便对其进行测试。

但请注意,您可以使用COLLATE术语按每列或每个操作声明归类,例如

CREATE TABLE sometable(
   ...,
   companyname text COLLATE "ru_RU",
   ...
);

SELECT *
FROM sometable
ORDER BY companyname COLLATE "ru_RU"

SELECT *
FROM sometable
WHERE companyname < 'Компания' COLLATE "ru_RU"

所以你不仅限于数据库的整理。

(这实际上是正确处理各种/混合语言数据的唯一方法,因为无论如何都没有正确的整理数据。)

编辑显示示例:

test=> SHOW lc_collate;
 lc_collate 
------------
 en_AU.utf8
(1 row)

test=> SELECT * FROM (VALUES ('z'),('aa')) x(y) ORDER BY y;
 y  
----
 a
 aa
 z
(3 rows)

craig=> SELECT * FROM (VALUES ('z'),('aa')) x(y) ORDER BY y COLLATE "da_DK";
 y  
----
 a
 z
 aa
(3 rows)

这也表明,独立于语言的整理概念完全是胡说八道,而人们通常所说的是&#34;类似英语的整理&#34;或者&#34;通过Unicode序数进行整理&#34; (大部分都是英语式的)。