這似乎與字符集有關。如果我在使用ISO8859P15作爲字符集的10.2.0.3和11.1.0.7數據庫中運行相同的測試,我也得到1的距離。我猜測Oracle正在用字節計算距離,而不是可變寬度字符集中的字符。
您可以使用CONVERT函數將轉換爲固定寬度的字符集(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.
謝謝你的解決方法解決該問題。很奇怪,但是比較'a'和'bb'在AL32UTF8中給出2,在WE8ISO8859P15中給出2,而在AL16UTF16中給出3。 – asalamon74 2008-10-28 09:45:07