Písmeno „a“ s diakritikou je posloupnost znaků, tj. kombinace a a spojovací znak, diakritiku ̨ :E'a\u0328'
Existuje ekvivalentní předem složený znak ą :E'\u0105'
Řešením by bylo normalizovat řetězce Unicode, tj. převedení sekvence kombinujících znaků na předem složený znak před jejich porovnáním.
Bohužel se zdá, že Postgres nemá vestavěnou funkci normalizace Unicode, ale můžete k ní snadno přistupovat prostřednictvím PL/Perl nebo PL/Python jazyková rozšíření.
Například:
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;
Nyní jako sekvence znaků E'a\u0328'
je namapován na ekvivalentní předem složený znak E'\u0105'
pomocí unicode_normalize
, levenshteinská vzdálenost je správná:
select levenshtein(unicode_normalize(E'a\u0328'), 'x');
levenshtein
-------------
1