Saya pikir ini adalah bug Pg.
Menurut pendapat saya, PostgreSQL harus menormalkan utf-8 ke dalam bentuk yang telah dibuat sebelumnya sebelum melakukan konversi penyandian. Hasil konversi yang ditampilkan salah.
Saya akan mengangkatnya di pgsql-bugs ... selesai.
http://www.postgresql.org/message-id/example @sqldat.com
Anda harus dapat mengikuti utas di sana.
Sunting :pgsql-hackers tampaknya tidak setuju, jadi ini tidak mungkin berubah dengan tergesa-gesa. Saya sangat menyarankan Anda untuk menormalkan UTF-8 Anda pada batas masukan aplikasi Anda.
BTW, ini bisa disederhanakan menjadi:
regress=> SELECT 'á' = 'á';
?column?
----------
f
(1 row)
yang merupakan omong kosong biasa, tetapi diizinkan. Yang pertama sudah disiapkan, yang kedua tidak. (Untuk melihat hasil ini, Anda harus menyalin &menempel, dan itu hanya akan berfungsi jika browser atau terminal Anda tidak menormalkan utf-8).
Jika Anda menggunakan Firefox, Anda mungkin tidak melihat hal di atas dengan benar; Chrome merendernya dengan benar. Inilah yang akan Anda lihat jika browser Anda menangani Unicode yang telah didekomposisi dengan benar: