एक विशेषक के साथ 'ए' एक वर्ण अनुक्रम है, यानी a का संयोजन और एक संयोजन चरित्र, विशेषक ̨ :E'a\u0328'
एक समान पूर्वनिर्मित वर्ण है ą :E'\u0105'
इसका समाधान सामान्यीकरण होगा। यूनिकोड स्ट्रिंग्स, यानी संयोजन वर्ण अनुक्रम को उनकी तुलना करने से पहले पहले से तैयार किए गए वर्ण में बदलने के लिए।
दुर्भाग्य से, Postgres में एक अंतर्निहित यूनिकोड सामान्यीकरण फ़ंक्शन नहीं लगता है, लेकिन आप पीएल/पर्ल या PL/Python भाषा एक्सटेंशन।
उदाहरण के लिए:
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;
अब, वर्ण अनुक्रम के रूप में E'a\u0328'
समतुल्य पूर्व-निर्मित वर्ण E'\u0105'
. पर मैप किया गया है unicode_normalize
. का उपयोग करके , लेवेनशेटिन दूरी सही है:
select levenshtein(unicode_normalize(E'a\u0328'), 'x');
levenshtein
-------------
1