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

标签 postgresql utf-8 cpanel collation phppgadmin

在使用 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/

相关文章:

c# - 将 IN 谓词与字符串数组一起使用时,PostgreSQL 缺少运算符

postgresql - 获取 Postgres 数据库的编码

postgresql - postgres 检查外部表列

具有国际/UTF-8 字符的 Python urllib2() 函数

php - 从 PHP 以 UTF-8 编码

php - 如何截断具有 unicode 字符的单词而不破坏 unicode?

mysql - 无法远程连接到 MySQL cPanel 数据库

postgresql - 如何使 SchemaCrawler 在 Windows 中工作?

linux - 将新文件上传到服务器时出现 500 内部错误

php - 如何在 cPanel 共享主机上上传 Laravel 项目?