sql >> Databasteknik >  >> RDS >> Mysql

mySQL - matchande latin (engelska) formulärinmatning till utf8 (icke-engelska) data

En möjlig lösning skulle vara att skapa en annan kolumn i databasen bredvid "artist", som "artist_normalized". Här, medan du fyller i tabellen, kan du infoga en "normaliserad" version av strängen. Sökning kan sedan utföras mot kolumnen artist_normalized.

En testkod:

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

Resultat:

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

Magin görs av klassen Transliterator. Den angivna regeln utför tre åtgärder:bryter ner strängen, tar bort diakritiska tecken och komponerar sedan om strängen, kanoniserad. Transliterator i PHP är byggd ovanpå ICU, så genom att göra detta förlitar du dig på tabellerna i ICU-biblioteket, som är kompletta och pålitlig.

Obs:denna lösning kräver PHP 5.4 eller senare med intl förlängning.




  1. Vad är beteendet för minusoperatorn mellan två datumtider i MySQL?

  2. PostgreSQL LIKE-frågeprestandavariationer

  3. MySQL TEXT vs BLOB vs CLOB

  4. Kardinalitetsuppskattning:Kombinera densitetsstatistik