Ich habe Postgres 9.4.4 unter Debian und bekomme folgendes ORDER BY
Verhalten:
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)
Und uname -a
:
Linux ---- 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1 x86_64 GNU/Linux
Auf meinem iMac mit Postgres 9.3.4 erhalte ich jedoch Folgendes:
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)
Und die 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
Es ist mir ein Rätsel, warum bei der Debian-Version die Groß- und Kleinschreibung nicht beachtet wird und bei der OS X-Version nicht. Was fehlt mir oder welche weiteren Informationen muss ich bereitstellen?
Update : Auf meinem Mac zeigt die pg_collation
Tabelle, dass ich eine en_US.UTF-8
Kollatierung habe, aber auf Debian habe ich eine en_US.utf8
Kollatierung. So auf meinem 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)
Und unter 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)
Also en_US.UTF-8
und en_US.utf8
unterschiedliche Sortierreihenfolgen?
select * from pg_collation
die Debian-Box hat en_US.utf8
, während das OS X hat en_US.UTF-8
. Wenn Sie diese verwenden, um die Sortierung explizit für die jeweiligen Felder zu erzwingen, werden unterschiedliche Sortierreihenfolgen angezeigt: (
'D d a A c b CD Capacitor'
nicht alstext
Feld geworfen wird ? IE, versuchen SieSELECT regexp_split_to_table('D d a A c b CD Capacitor'::text, ' ') ORDER BY 1;
und sehen, was passiert ...