ฉันมี Postgres 9.4.4 ทำงานบน Debian และฉันได้รับORDER BY
พฤติกรรมดังต่อไปนี้:
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)
และuname -a
:
Linux ---- 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1 x86_64 GNU/Linux
อย่างไรก็ตามใน iMac ของฉันกับ Postgres 9.3.4 ฉันได้รับสิ่งต่อไปนี้:
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)
และ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
ฉันประหลาดใจด้วยสาเหตุที่รุ่น Debian ดูเหมือนจะไม่ตรงตามตัวพิมพ์เล็กและรุ่น OS X ไม่ใช่ ฉันจะพลาดอะไรหรือข้อมูลอื่น ๆ ที่ฉันจำเป็นต้องให้?
อัปเดต : บน Mac ของฉันpg_collation
ตารางแสดงฉันมีการen_US.UTF-8
เปรียบเทียบ แต่บน Debian ฉันมีการen_US.utf8
เปรียบเทียบ ดังนั้นบน Mac ของฉัน:
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)
และบน 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)
ดังนั้นen_US.UTF-8
และen_US.utf8
มีคำสั่งการเรียงลำดับที่แตกต่างกันอย่างไร
select * from pg_collation
การแสดง Debian กล่องมีen_US.utf8
ในขณะที่ OS X en_US.UTF-8
มี การใช้คำสั่งเหล่านั้นเพื่อบังคับการเรียงหน้าอย่างชัดเจนบนกล่องที่เกี่ยวข้องแสดงคำสั่งการเรียงลำดับที่แตกต่างกัน :(
'D d a A c b CD Capacitor'
จะไม่ถูกส่งเป็นtext
ฟิลด์บน Mac? IE ลองSELECT regexp_split_to_table('D d a A c b CD Capacitor'::text, ' ') ORDER BY 1;
ดูว่าจะเกิดอะไรขึ้น ...