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

PostgreSQL 9.1 menggunakan susun dalam pernyataan terpilih

Saya tidak dapat menemukan cacat dalam desain Anda. Saya sudah mencoba.

Lokal dan susunan

Saya meninjau kembali pertanyaan ini. Pertimbangkan kasus uji di sqlfiddle ini . Tampaknya bekerja dengan baik. Saya bahkan membuat ca_ES.utf8 lokal di server pengujian lokal saya (PostgreSQL 9.1.6 pada Debian Squeeze) dan menambahkan lokal ke cluster DB saya:

CREATE COLLATION "ca_ES" (LOCALE = 'ca_ES.utf8');

Saya mendapatkan hasil yang sama seperti yang dapat dilihat pada sqlfiddle di atas.

Perhatikan bahwa nama susunan adalah pengidentifikasi dan perlu dikutip ganda untuk mempertahankan ejaan CamelCase seperti "ca_ES" . Mungkin ada beberapa kebingungan dengan lokal lain di sistem Anda? Periksa kolasi yang tersedia :

SELECT * FROM pg_collation;

Umumnya, aturan susunan diturunkan dari lokal sistem . Baca tentang detail dalam manual di sini . Jika Anda masih mendapatkan hasil yang salah, saya akan mencoba memperbarui sistem Anda dan membuat ulang lokal untuk "ca_ES" . Di Debian (dan distribusi Linux terkait) ini dapat dilakukan dengan:

dpkg-reconfigure locales

NFC

Saya punya satu ide lain:string UNICODE yang tidak dinormalisasi .

Mungkinkah 'Àudio' your Anda sebenarnya '̀ ' || 'Audio' ? Itu akan menjadi karakter ini:

SELECT U&'\0300A';
SELECT ascii(U&'\0300A');
SELECT chr(768);

Baca lebih lanjut tentang aksen akut di wikipedia .
Anda harus SET standard_conforming_strings = TRUE untuk menggunakan string Unicode seperti pada baris pertama.

Perhatikan bahwa beberapa browser tidak dapat menampilkan karakter Unicode yang tidak dinormalisasi dengan benar dan banyak font tidak memiliki mesin terbang yang tepat untuk karakter khusus, jadi Anda mungkin tidak melihat apa pun di sini atau omong kosong. Tapi UNICODE mengizinkan omong kosong itu. Uji untuk melihat apa yang Anda dapatkan:

SELECT octet_length('̀A')  -- returns 3 (!)
SELECT octet_length('À')  -- returns 2

Jika itu yang dikontrak oleh database Anda, Anda harus menyingkirkannya atau menanggung akibatnya. Obatnya adalah menormalkan string Anda menjadi NFC . Perl memiliki keterampilan UNICODE-foo yang unggul, Anda dapat menggunakan perpustakaan mereka dalam fungsi plperlu untuk melakukannya di PostgreSQL. Saya telah melakukan itu untuk menyelamatkan saya dari kegilaan.

Baca petunjuk penginstalan di artikel luar biasa ini tentang normalisasi UNICODE di PostgreSQL oleh David Wheeler .
Baca semua detail mengerikan tentang Formulir Normalisasi Unicode di unicode.org .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa yang Setara dengan PostgreSQL Dengan SQL Server NVARCHAR?

  2. membelah baris di Redshift

  3. Untuk mengabaikan kunci duplikat selama 'salin dari' di postgresql

  4. Klien MQTT berlangganan Perubahan DB PostgreSQL

  5. Format Angka dengan Koma di PostgreSQL