Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

mySQL - correspondência de entrada de formulário latino (inglês) para dados utf8 (não inglês)


Uma possível solução seria criar outra coluna no banco de dados ao lado de "artist", como "artist_normalized". Aqui, ao preencher a tabela, você pode inserir uma versão "normalizada" da string. A pesquisa pode então ser realizada na coluna artist_normalized.

Um código de teste:
<?php
$transliterator = Transliterator::createFromRules(':: NFD; :: [:Nonspacing Mark:] Remove; :: NFC;', Transliterator::FORWARD);
$test = ['abcd', 'èe', '€', 'àòùìéëü', 'àòùìéëü', 'tiësto'];
foreach($test as $e) {
    $normalized = $transliterator->transliterate($e);
    echo $e. ' --> '.$normalized."\n";
}
?>

Resultado:
abcd --> abcd
èe --> ee
€ --> €
àòùìéëü --> aouieeu
àòùìéëü --> aouieeu
tiësto --> tiesto

A mágica é feita pela classe Transliterator. A regra especificada executa três ações:decompõe a string, remove diacríticos e depois recompõe a string, canonizada. O Transliterator em PHP é construído em cima do ICU, então ao fazer isso você está contando com as tabelas da biblioteca ICU, que estão completas e confiável.

Nota:esta solução requer PHP 5.4 ou superior com o intl extensão.