我們的Oracle DB是UTF8。我們正在存儲需要搜索的地址。部分街道名稱包含非英文字符(例如PeñaBáináõ),需要搜索「PeñaBáináõ」或英文等同字符「佩納貝012」。我們所做的是將文本轉換的查詢,像:帶有非英文字符的Oracle搜索文本
SELECT CONVERT('Peña Báináõ','US7ASCII') as converted FROM dual;
但這裏的問題是,並非所有的人物都有一個相當於英語(甚至一些很明顯的像N或O),所以我們最終的文本轉換爲:
Pe?a Baina?
因此,如果用戶試圖找到ADDRES鍵入「佩納百腦匯」他找不到它,因爲「佩納百腦匯」是「」不同Pe?a Baina?「」。
我們已經想出了一些骯髒的workarrounds在這個,但我想先檢查,如果有人找到了更優雅的解決方案。
下面是一些字符不被轉換爲US7ASCII列表:使用nlssort
與BINARY_AI(無論大小寫和重音insentive)
Character UTF8 Code Possible Equivalent
æ - u00E6 - ae
å - u00E5 - a
ã - u00E3 - a
ñ - u00F1 - n
õ - u00F5 - o
也考慮SOUNDEX和其他基於相似性的功能。 – Randy
'soundex('Pena Bainao')'yeilds P515,'soundex('PeñaBáináõ')'yeilds P150。會話參數NLS_SORT和NLS_COMP不會影響結果。 –
@Shannon Severance:很好,ALTER SESSION SET NLS_COMP = LINGUISTIC和ALTER SESSION SET NLS_SORT = BINARY_AI也沒有這個竅門,但它們顯着降低了查詢的複雜度。非常感謝! – Chepech