Mysql
 sql >> Base de données >  >> RDS >> Mysql

mySQL - correspondance de l'entrée de formulaire latin (anglais) avec les données utf8 (non anglaises)

Une solution possible serait de créer une autre colonne dans la base de données à côté de "artist", comme "artist_normalized". Ici, tout en remplissant la table, vous pouvez insérer une version "normalisée" de la chaîne. La recherche peut alors être effectuée sur la colonne artist_normalized.

Un code de test :

<?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";
}
?>

Résultat :

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

La magie est opérée par la classe Transliterator. La règle spécifiée effectue trois actions :décompose la chaîne, supprime les signes diacritiques, puis recompose la chaîne, canonisée.Transliterator en PHP est construit au-dessus d'ICU, donc en faisant cela, vous vous appuyez sur les tables de la bibliothèque ICU, qui sont complètes et fiable.

Remarque :cette solution nécessite PHP 5.4 ou supérieur avec intl extension.