mySQL - сопоставление латинской (английской) формы ввода с данными utf8 (не английскими)
Я поддерживаю музыкальную базу данных в MySQL, как мне возвращать результаты, хранящиеся, например, в. «Tiësto», когда люди ищут «Tiesto»?
Все данные хранятся при полнотекстовой индексации, если это имеет значение.
Я уже использую комбинацию Левенштейна в PHP и REGEXP в SQL - не для того, чтобы попытаться решить эту проблему, а просто для повышения возможности поиска в целом.
PHP:
function Levenshtein($word) {
$words = array();
for ($i = 0; $i < strlen($word); $i++) {
$words[] = substr($word, 0, $i) . '_' . substr($word, $i);
$words[] = substr($word, 0, $i) . substr($word, $i + 1);
$words[] = substr($word, 0, $i) . '_' . substr($word, $i + 1);
}
$words[] = $word . '_';
return $words;
}
$fuzzyartist = Levenshtein($_POST['searchartist']);
$searchimplode = "'".implode("', '", $fuzzyartist)."'";
MySql:
SELECT *
FROM new_track_database
WHERE artist REGEXP concat_ws('|', $searchimplode);
Кроме того, я часто выполняю преобразования набора символов и санацию строк в PHP, но это всегда был ДРУГОЙ способ - стандартизация нелатинских символов. Я не могу заставить себя выполнить противоположный процесс, но только при определенных обстоятельствах, основанных на данных, которые я сохранил.