我在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
命令时,我得到:
**编辑
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;
结果: a 一个 一个 b 乙 C C d Ø Ø ž ž
(我认为这种顺序对于英语来说甚至是错误的,资本'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;
现在的结果是: A. 一个 乙 b C C d ž ž Ø Ø A
这看起来非常好,我以为我已经完成了......但是我试过了:
db=# select * from unnest(ARRAY['aaaa','bbbb','cccc','dddd','AAAA','BBBB','CCCC','åååå','øøøø','zzzz','ZZZZ','ØØØØ']) as t1 order by t1 collate nor;
结果: BBBB BBBB CCCC CCCC DDDD ZZZZ ZZZZ 呜 呜 AAAA AAAA AAAA
我在这里做错了什么?
答案 0 :(得分:2)
顺序正确。在挪威语中,“ aa”是“å”的拼写,应该放在结尾。
来源:https://en.wikipedia.org/wiki/%C3%85
丹麦语和挪威语中正确的字母顺序将Å排在最后 字母中的字母,顺序为Æ,Ø,Å。这也是事实 替代拼写为“ Aa”。除非手动纠正,否则排序 将针对丹麦语或挪威语本地化的程序算法 例如Aaron紧随Zorro之后。