PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Penyortiran PostgreSQL salah

Mengurutkan perilaku untuk teks (termasuk char dan varchar serta text type) tergantung pada kolasi saat ini lokal Anda.

Lihat pertanyaan terkait sebelumnya:

  • Urutan PostgreSQL
  • https://stackoverflow.com/q/21006868/398670

Jika Anda ingin melakukan pengurutan sederhana berdasarkan nilai ASCII, daripada pengurutan yang dilokalkan dengan benar mengikuti aturan bahasa lokal Anda, Anda dapat menggunakan COLLATE klausa

select * 
from test
order by title COLLATE "C" ASC

atau ubah susunan basis data secara global (memerlukan dump dan reload, atau pengindeksan ulang penuh). Pada sistem Linux Fedora 19 saya, saya mendapatkan hasil sebagai berikut:

regress=> SHOW lc_collate;
 lc_collate  
-------------
 en_US.UTF-8
(1 row)

regress=> WITH v(title) AS (VALUES ('#a'), ('a'), ('#'), ('a#a'), ('a#')) 
          SELECT title FROM v ORDER BY title ASC;
 title 
-------
 #
 a
 #a
 a#
 a#a
(5 rows)

regress=> WITH v(title) AS (VALUES ('#a'), ('a'), ('#'), ('a#a'), ('a#')) 
          SELECT title FROM v ORDER BY title COLLATE "C" ASC;
 title 
-------
 #
 #a
 a
 a#
 a#a
(5 rows)

PostgreSQL menggunakan dukungan susunan sistem operasi Anda, jadi mungkin saja hasilnya sedikit berbeda dari OS host ke OS host. Secara khusus, setidaknya beberapa versi Mac OS X telah secara signifikan merusak penanganan susunan unicode.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara memasukkan baris yang dikecualikan di RETURNING from INSERT ... ON CONFLICT

  2. Bagaimana cara menambahkan kolom jika tidak ada di PostgreSQL?

  3. Nama Proses PostgreSQL di Windows

  4. Buat tabel dua jenis di PostgreSQL

  5. Pengaturan skema di PostgreSQL JDBC sepertinya tidak berfungsi