gpt4 book ai didi

postgresql - 非英语语言的 en_us.UTF8 归类

转载 作者:行者123 更新时间:2023-11-29 12:11:26 25 4
gpt4 key购买 nike

在使用 MySQL 一段时间后,我第一次尝试使用 PostgreSQL 数据库。我的环境是与 cPanel 和 phpPgAdmin 共享主机。令我困惑的一件事是数据库整理。我的主机的 cPanel 始终创建数据库,其中 EncodingCollat​​ionCharacter Type 设置为 UTF8分别是 en_US.UTF-8en_US.UTF-8。我似乎没有办法更改它,因为数据库是通过 cPanel 创建的,那里没有选项,根据这个答案,这些参数只能通过使用所需设置重新创建数据库来更改。

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

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

最佳答案

整理行为将取决于底层操作系统的语言环境支持。总的来说,我认为对于当前语言环境之外的字符,您应该期待相当“愚蠢”的排序,可能是通过 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)

这也表明独立于语言的排序规则的概念完全是胡说八道,人们通常真正的意思是“类英语排序规则”或“按 Unicode 序号排序”(主要是类英语顺序)。

关于postgresql - 非英语语言的 en_us.UTF8 归类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32928090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com