Mysql
 sql >> Database >  >> RDS >> Mysql

mySQL - corrispondenza dell'input del modulo latino (inglese) con dati utf8 (non inglesi).

Una possibile soluzione sarebbe creare un'altra colonna nel database accanto a "artista", come "artista_normalizzato". Qui, mentre si popola la tabella, è possibile inserire una versione "normalizzata" della stringa. La ricerca può quindi essere eseguita sulla colonna artist_normalized.

Un codice di prova:

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

Risultato:

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

La magia è fatta dalla classe Transliterator. La regola specificata esegue tre azioni:scompone la stringa, rimuove i segni diacritici e quindi ricompone la stringa, canonicalized.Transliterator in PHP è basato su ICU, quindi in questo modo ti affidi alle tabelle della libreria ICU, che sono complete e affidabile.

Nota:questa soluzione richiede PHP 5.4 o superiore con intl estensione.