不同于Go和PostgreSQL的排序顺序

不同于Go和PostgreSQL的排序顺序,go,psql,Go,Psql,对文本数组进行排序的SQL查询 SELECT unnest(ARRAY['Go', '[Bravo]', 'Gopher', '[Alpha]', 'Grin', 'Delta']) ORDER BY 1 ASC; unnest --------- [Alpha] [Bravo] Delta Go Gopher Grin GO代码对字符串数组进行排序 为什么结果不同?在SQL查询中,您可以取消数组的设置。这似乎给出了一个排序顺序,没有或忽略了[和] 在围棋中,方形前导括号被视

对文本数组进行排序的SQL查询

SELECT unnest(ARRAY['Go', '[Bravo]', 'Gopher', '[Alpha]', 'Grin', 'Delta']) ORDER BY 1 ASC;
 unnest  
---------
 [Alpha]
 [Bravo]
 Delta
 Go
 Gopher
 Grin
GO代码对字符串数组进行排序


为什么结果不同?

在SQL查询中,您可以
取消数组的设置。这似乎给出了一个排序顺序,没有或忽略了
[
]

在围棋中,方形前导括号被视为弦的一部分。这两个函数似乎都是按字典顺序排序的。

Go似乎使用“ascii”排序

您可以在Postgres中使用
collate“C”
实现这一点:

SELECT word
from unnest(ARRAY['Go', '[Bravo]', 'Gopher', '[Alpha]', 'Grin', 'Delta']) as t(word) 
ORDER BY word collate "C" ;

对sql似乎忽略了“['']”。任何原因,为什么sql会这样做way@MadhuSudhanCS:它不会“忽略”它们,它们只是排序在其他字符之前。排序规则设置可能是什么?例如,在我的机器上,postgres输出与Go的输出匹配。参见:
显示信用证核对;lc\U collate--------en\u US.UTF-8
我的collate设置与你的相同。很好!TIL
collate
SELECT word
from unnest(ARRAY['Go', '[Bravo]', 'Gopher', '[Alpha]', 'Grin', 'Delta']) as t(word) 
ORDER BY word collate "C" ;