'A' với một dấu phụ là một chuỗi ký tự, tức là sự kết hợp của a và một ký tự kết hợp, dấu phụ ̨:E'a\u0328'
Có một ký tự được viết trước tương đương ą :E'\u0105'
Một giải pháp sẽ là chuẩn hóa các chuỗi Unicode, tức là để chuyển đổi chuỗi ký tự kết hợp thành ký tự được gộp trước trước khi so sánh chúng.
Thật không may, Postgres dường như không có chức năng chuẩn hóa Unicode tích hợp sẵn, nhưng bạn có thể dễ dàng truy cập một chức năng thông qua PL/Perl hoặc PL / Python mở rộng ngôn ngữ.
Ví dụ:
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;
Bây giờ, dưới dạng chuỗi ký tự E'a\u0328'
được ánh xạ vào ký tự thành phần sẵn tương đương E'\u0105'
bằng cách sử dụng unicode_normalize
, khoảng cách levenshtein là đúng:
select levenshtein(unicode_normalize(E'a\u0328'), 'x');
levenshtein
-------------
1