Nuestro Oracle DB es UTF8. Estamos almacenando direcciones que necesitan ser buscadas. Algunos de los nombres de las calles contienen caracteres no ingleses (por ejemplo, Peña Báináõ), debe poder buscarse como "Peña Báináõ" o con caracteres equivalentes en inglés como "Pena Bainao". Lo que hicimos es convertir el texto en la consulta, algo así como:Texto de búsqueda de Oracle con caracteres no ingleses
SELECT CONVERT('Peña Báináõ','US7ASCII') as converted FROM dual;
Pero la cuestión aquí es que no todos los personajes tienen un equivalente Inglés (no incluso algunos bastante obvios, como N u O) por lo nos encontramos con el texto convertido en:
Pe?a Baina?
lo tanto, si el usuario intenta encontrar que addres escribir "Pena Bainao" no puede encontrarlo porque "Pena Bainao" es diferente de "" Pe? A Baina? "".
Hemos descubierto algunos trabajos sucios en esto, pero quería comprobar primero si alguien ha encontrado una solución más elegante.
Aquí está una lista de algunos personajes que no se convierten a US7ASCII:
Character UTF8 Code Possible Equivalent
æ - u00E6 - ae
å - u00E5 - a
ã - u00E3 - a
ñ - u00F1 - n
õ - u00F5 - o
también consideran SOUNDEX y otras funciones basadas en la similitud. – Randy
'soundex ('Pena Bainao')' yeilds P515, 'soundex ('Peña Báináõ')' yeilds P150. Los parámetros de sesión NLS_SORT y NLS_COMP no afectan los resultados. –
@Shannon Severance: genial, ALTER SESSION SET NLS_COMP = LINGUISTIC y ALTER SESSION SET NLS_SORT = BINARY_AI no hizo el truco, pero redujo significativamente la complejidad de la consulta. ¡Muchas gracias! – Chepech