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

Apakah ada Postgresql Levenshtein multibyte-aware?

'a' dengan diakritik adalah urutan karakter, yaitu kombinasi dari a dan karakter gabungan, diakritik :E'a\u0328'

Ada karakter pra-komposisi yang setara ą :E'\u0105'

Solusinya adalah dengan menormalkan string Unicode, yaitu untuk mengubah urutan karakter yang digabungkan menjadi karakter yang telah dibuat sebelumnya sebelum membandingkannya.

Sayangnya, Postgres tampaknya tidak memiliki fungsi normalisasi Unicode bawaan, tetapi Anda dapat dengan mudah mengaksesnya melalui PL/Perl atau PL/Python ekstensi bahasa.

Misalnya:

create extension plpythonu;

create or replace function unicode_normalize(str text) returns text as $$
  import unicodedata
  return unicodedata.normalize('NFC', str.decode('UTF-8'))
$$ language plpythonu;

Sekarang, sebagai urutan karakter E'a\u0328' dipetakan ke karakter pra-komposisi yang setara E'\u0105' dengan menggunakan unicode_normalize , jarak levenshtein benar:

select levenshtein(unicode_normalize(E'a\u0328'), 'x');
levenshtein
-------------
           1



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JDBC menyisipkan array nyata

  2. Bagaimana cara membuat database baru dengan ekstensi hstore yang sudah diinstal?

  3. Menggunakan interval di PostgreSQL dengan Ruby on Rails

  4. Baris perintah PostgreSQL psql menampilkan kolom byte

  5. Kembalikan beberapa bidang sebagai catatan di PostgreSQL dengan PL/pgSQL