postgresql - 如何在 Postgres 上对挪威文本进行排序

标签 postgresql utf-8 localization postgresql-9.2

我在 Postgres 中对挪威文本列进行排序时遇到问题。
我的环境:

db=# select version();
PostgreSQL 9.2.14 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4), 64-bit 

数据库托管在 RedHat Openshift 上。

运行时 >locale我得到的命令:
  • 语言环境:无法将 LC_CTYPE 设置为默认语言环境:没有这样的文件或目录
  • 语言环境:无法将 LC_ALL 设置为默认语言环境:没有这样的文件或目录
  • LANG=en_US.UTF-8
  • LC_CTYPE=UTF-8
  • LC_NUMERIC="en_US.UTF-8"
  • LC_TIME="en_US.UTF-8"
  • LC_COLLATE="en_US.UTF-8"
  • LC_MONETARY="en_US.UTF-8"
  • LC_MESSAGES="en_US.UTF-8"
  • LC_PAPER="en_US.UTF-8"
  • LC_NAME="en_US.UTF-8"
  • LC_ADDRESS="en_US.UTF-8"
  • LC_TELEPHONE="en_US.UTF-8"
  • LC_MEASUREMENT="en_US.UTF-8"
  • LC_IDENTIFICATION="en_US.UTF-8"
  • LC_ALL=

  • **编辑
    db=#\l
              Name           |    Owner     | Encoding |   Collate   |    Ctype    |   Access privileges   
    -------------------------+--------------+----------+-------------+-------------+-----------------------
     db                      | myadminUser  | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
    

    这是我试过的
    此 sql 显示默认排序不正确:
    db=# select * from unnest(ARRAY['a','b','c','d','A','B','C','å','ø','z','Z','Ø']) as t1 order by t1;
    

    结果:一种
    一种
    一种


    C
    C
    d
    ø
    Ø
    z
    Z


    (我认为这种排序顺序对于英语来说甚至是错误的,大写的 'A' 应该在 'a' 之前,不是吗?)

    然后我试过:
    db=# CREATE COLLATION nor (LOCALE = 'nn_NO.utf8');
    

    以及之前的相同声明:
    db=# select * from unnest(ARRAY['a','b','c','d','A','B','C','å','ø','z','Z','Ø']) as t1 order by t1 collate nor;
    

    现在的结果是:一种
    一种


    C
    C
    d
    Z
    z
    Ø
    ø
    å


    这看起来非常好,我以为我已经完成了..但后来我尝试了:
    db=# select * from unnest(ARRAY['aaaa','bbbb','cccc','dddd','AAAA','BBBB','CCCC','åååå','øøøø','zzzz','ZZZZ','ØØØØ']) as t1 order by t1 collate nor;
    

    结果: BBBB
    bbbb
    中交所
    cccc
    滴滴
    ZZZZ
    呜呜呜
    ØØØØ
    øøøø
    美国AAAA
    啊啊啊
    åååå


    我在这里做错了什么?

    最佳答案

    顺序是正确的。在挪威语中,“aa”是“å”的拼写,它应该放在最后。
    来源:https://en.wikipedia.org/wiki/%C3%85

    Correct alphabetization in Danish and Norwegian places Å as the last letter in the alphabet, the sequence being Æ, Ø, Å. This is also true for the alternative spelling "Aa". Unless manually corrected, sorting algorithms of programs localised for Danish or Norwegian will place e.g., Aaron after Zorro.

    关于postgresql - 如何在 Postgres 上对挪威文本进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34154030/

    相关文章:

    反向相关模型中的Django postgres全文搜索

    javascript - 使用 handsontable 获取单元格数据

    postgresql - pq 驱动程序 : prepared statement does not exist

    mysql - 使用带有 UTF8 的 VARCHAR 的 SQL 表(关于多字节字符长度)

    php - 编码问题

    java.text.ParseException : Unparseable number: “2,3456” (at offset 5)

    postgresql - liquibase 中的 Postgres 删除函数显示错误

    c# - 从可变字符串加载字符串类型(如可变变量和反射)

    .net - C#中如何区分简体中文和繁体中文?

    utf-8 - 在 mysql 服务器上从 latin1 更改为 utf8