tex*_*nic 4 postgresql phppgadmin collation utf-8 cpanel
在使用 MySQL 一段时间后,我第一次尝试 PostgreSQL 数据库。我的环境是与 cPanel 和 phpPgAdmin 共享的托管。让我困惑的一件事是数据库排序规则。我的主机的 cPanel 始终创建数据库Encoding,并将Collation、 和分别Character Type设置为UTF8、en_US.UTF-8和en_US.UTF-8。我似乎没有任何方法可以更改它,因为数据库是通过 cPanel 创建的,那里没有选项,并且根据此答案,只能通过使用所需设置重新创建数据库来更改这些参数。
所以我想知道:这真的重要吗?如果排序规则设置为 en_us.UTF8,那么对于非英语甚至非拉丁字符串(例如俄语或希伯来语)会发生什么情况?它们将如何排序?
更新:我很困惑,因为在 MySQL 中我过去只选择 utf8mb4_unicode_ci 排序规则而不关心特定语言。我想知道它与 PostgreSQL 中特定于国家/地区语言的排序规则相比如何工作。
排序规则行为将取决于底层操作系统的区域设置支持。一般来说,我认为您应该期待对当前语言环境之外的字符进行相当“愚蠢”的排序,可能是按 Unicode 代码点排序。可能是unicode 排序算法的默认排序规则。
\n\n我很难快速找到以不同方式整理的示例数据来进行测试。
\n\n但请注意,您可以使用以下命令在每列或每个操作的基础上声明排序规则COLLATE,例如
CREATE TABLE sometable(\n ...,\n companyname text COLLATE "ru_RU",\n ...\n);\nRun Code Online (Sandbox Code Playgroud)\n\n或者
\n\nSELECT *\nFROM sometable\nORDER BY companyname COLLATE "ru_RU"\nRun Code Online (Sandbox Code Playgroud)\n\n或者
\n\nSELECT *\nFROM sometable\nWHERE companyname < \'\xd0\x9a\xd0\xbe\xd0\xbc\xd0\xbf\xd0\xb0\xd0\xbd\xd0\xb8\xd1\x8f\' COLLATE "ru_RU"\nRun Code Online (Sandbox Code Playgroud)\n\n因此您不受数据库排序规则的限制。
\n\n(这样做实际上是正确处理各种/混合语言中的数据的唯一方法,因为无论如何都没有对所有数据进行正确的排序规则)。
\n\n编辑显示示例:
\n\ntest=> SHOW lc_collate;\n lc_collate \n------------\n en_AU.utf8\n(1 row)\n\ntest=> SELECT * FROM (VALUES (\'z\'),(\'aa\')) x(y) ORDER BY y;\n y \n----\n a\n aa\n z\n(3 rows)\n\ncraig=> SELECT * FROM (VALUES (\'z\'),(\'aa\')) x(y) ORDER BY y COLLATE "da_DK";\n y \n----\n a\n z\n aa\n(3 rows)\nRun Code Online (Sandbox Code Playgroud)\n\n这也表明,与语言无关的排序规则的概念完全是无稽之谈,人们通常真正的意思是“类英语排序规则”或“按 Unicode 序数排序”(主要是类英语顺序)。
\n| 归档时间: |
|
| 查看次数: |
3981 次 |
| 最近记录: |