Наша база данных 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? баина?"".
Мы нашли некоторые грязные способы решения этой проблемы, но сначала я хотел проверить, нашел ли кто-то более изящное решение.
Вот список некоторых символов, которые не преобразованы в US7ASCII:
Character UTF8 Code Possible Equivalent
æ - u00E6 - ae
å - u00E5 - a
ã - u00E3 - a
ñ - u00F1 - n
õ - u00F5 - o