Tôi có Postgres 9.4.4 chạy trên Debian và tôi có ORDER BY
hành vi sau :
veure_test=# show LC_COLLATE;
lc_collate
-------------
en_US.UTF-8
(1 row)
veure_test=# SELECT regexp_split_to_table('D d a A c b CD Capacitor', ' ') ORDER BY 1;
regexp_split_to_table
-----------------------
a
A
b
c
Capacitor
CD
d
D
(8 rows)
Và uname -a
:
Linux ---- 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1 x86_64 GNU/Linux
Tuy nhiên, trên iMac của tôi, với Postgres 9.3.4, tôi nhận được những điều sau:
veure_test=# show LC_COLLATE;
lc_collate
-------------
en_US.UTF-8
(1 row)
veure_test=# SELECT regexp_split_to_table('D d a A c b CD Capacitor', ' ') ORDER BY 1;
regexp_split_to_table
-----------------------
A
CD
Capacitor
D
a
b
c
d
(8 rows)
Và uname -a
:
Darwin ---- 14.4.0 Darwin Kernel Version 14.4.0: Thu May 28 11:35:04 PDT 2015; root:xnu-2782.30.5~1/RELEASE_X86_64 x86_64
Tôi đang bối rối tại sao phiên bản Debian dường như không phân biệt chữ hoa chữ thường và phiên bản OS X thì không. Tôi còn thiếu gì, hoặc tôi cần cung cấp thông tin gì khác?
Cập nhật : Trên máy Mac của tôi, pg_collation
bảng hiển thị tôi có en_US.UTF-8
đối chiếu, nhưng trên Debian, tôi có en_US.utf8
đối chiếu. Do đó, trên máy Mac của tôi:
veure_test=# with foo as (
SELECT regexp_split_to_table('D d a A c b CD Capacitor', ' ') as bar
)
SELECT bar FROM foo
ORDER BY bar collate "en_US.UTF-8";
bar
-----------
A
CD
Capacitor
D
a
b
c
d
(8 rows)
Và trên Debian:
veure_test=# with foo as (
SELECT regexp_split_to_table('D d a A c b CD Capacitor', ' ') as bar
)
SELECT bar FROM foo
ORDER BY bar collate "en_US.utf8";
bar
-----------
a
A
b
c
Capacitor
CD
d
D
(8 rows)
Vì vậy, en_US.UTF-8
và en_US.utf8
có thứ tự sắp xếp khác nhau?
select * from pg_collation
hộp Debian có en_US.utf8
, trong khi OS X thì có en_US.UTF-8
. Sử dụng chúng để buộc đối chiếu rõ ràng trên các hộp tương ứng sẽ hiển thị các thứ tự sắp xếp khác nhau :(
'D d a A c b CD Capacitor'
không được sử dụng như mộttext
trường trên máy Mac? IE, hãy thửSELECT regexp_split_to_table('D d a A c b CD Capacitor'::text, ' ') ORDER BY 1;
và xem điều gì sẽ xảy ra ...