이것은 문자 세트와 관련이있는 것으로 보입니다. ISO8859P15를 문자 집합으로 사용하는 10.2.0.3 및 11.1.0.7 데이터베이스에서 동일한 테스트를 실행하면 거리도 1만큼 늘어납니다. 필자는 오라클이 가변 폭 문자 세트의 문자가 아닌 바이트면에서 거리를 계산한다고 추측합니다.
당신은 고정 폭 문자 세트 (AL16UTF16 또는 로컬 문자 세트) 해결을위한
SQL> ed
Wrote file afiedt.buf
1 declare
2 l_char1 varchar2(1 char) := 'á';
3 l_char2 varchar2(1 char) := 'b';
4 begin
5 dbms_output.put_line(
6 'In AL32UTF8: ' ||
7 utl_match.edit_distance(l_char1, l_char2));
8 dbms_output.put_line(
9 'In WE8ISO8859P15: ' ||
10 utl_match.edit_distance(
11 CONVERT(l_char1, 'WE8ISO8859P15', 'AL32UTF8'),
12 CONVERT(l_char2, 'WE8ISO8859P15', 'AL32UTF8')));
13 dbms_output.put_line(
14 'In AL16UTF16: ' ||
15 utl_match.edit_distance(
16 CONVERT(l_char1, 'AL16UTF16', 'AL32UTF8'),
17 CONVERT(l_char2, 'AL16UTF16', 'AL32UTF8')));
18* end;
SQL>/
In AL32UTF8: 2
In WE8ISO8859P15: 1
In AL16UTF16: 1
PL/SQL procedure successfully completed.
감사로 변환 CONVERT 함수를 사용하여 문제를 해결할 수 있습니다. 꽤 이상하지만 'a'와 'bb'를 비교하면 AL32UTF8에서는 2, WE8ISO8859P15에서는 2, AL16UTF16에서는 3이됩니다. – asalamon74