我们的Oracle数据库是UTF8编码。我们正在存储需要进行搜索的地址。一些街道名称包含非英文字符(例如Peña Báináõ),需要将其作为"Peña Báináõ"或使用英语等效字符(如"Pena Bainao")进行搜索。我们所做的是在查询时转换文本,类似于:
SELECT CONVERT('Peña Báináõ','US7ASCII') as converted FROM dual;
但问题在于,并非所有字符都有英语等效项(甚至一些明显的字符如ñ或õ也没有),因此我们最终得到的文本是:
Pe?a Baina?
如果用户尝试通过输入“Pena Bainao”查找该地址,他将无法找到它,因为“Pena Bainao”与“Pe?a Baina?”不同。
我们已经想出了一些不太优雅的解决方法,但我想先检查一下是否有人找到了更加优雅的解决方案。
以下是一些未转换为US7ASCII的字符列表:
Character UTF8 Code Possible Equivalent
æ - u00E6 - ae
å - u00E5 - a
ã - u00E3 - a
ñ - u00F1 - n
õ - u00F5 - o
soundex('Pena Bainao')
的结果为 P515,soundex('Peña Báináõ')
的结果为 P150。会话参数 NLS_SORT 和 NLS_COMP 不会影响结果。 - Shannon Severance