sql >> Base de Datos >  >> RDS >> Mysql

mySQL:coincidencia de entrada de formulario latino (inglés) con datos utf8 (no inglés)

Una posible solución sería crear otra columna en la base de datos al lado de "artista", como "artista_normalizado". Aquí, mientras completa la tabla, puede insertar una versión "normalizada" de la cadena. La búsqueda se puede realizar en la columna artist_normalized.

Un código de prueba:

<?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

La magia la hace la clase Transliterator. La regla especificada realiza tres acciones:descompone la cadena, elimina los signos diacríticos y luego recompone la cadena, canonicalizada. Transliterator en PHP está construido sobre ICU, por lo que al hacer esto confía en las tablas de la biblioteca ICU, que están completas y confiable.

Nota:esta solución requiere PHP 5.4 o superior con intl extensión.