sql >> Databáze >  >> RDS >> Mysql

mySQL - porovnání latinského (anglického) vstupního formuláře s daty utf8 (neanglickými).

Možným řešením by bylo vytvoření dalšího sloupce v databázi vedle "artist", jako "artist_normalized". Zde můžete při naplňování tabulky vložit „normalizovanou“ verzi řetězce. Vyhledávání pak lze provést proti sloupci artist_normalized.

Testovací kód:

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

Výsledek:

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

Kouzlo provádí třída Transliterator. Zadané pravidlo provádí tři akce:rozloží řetězec, odstraní diakritiku a poté znovu složí řetězec, kanonizuje. Transliterator v PHP je postaven na ICU, takže se spoléháte na tabulky knihovny ICU, které jsou kompletní. a spolehlivý.

Poznámka:Toto řešení vyžaduje PHP 5.4 nebo vyšší s intl rozšíření.




  1. Jak používat klauzuli HAVING v SQL

  2. mySql zkopíruje řádky do stejné tabulky se změněnou hodnotou klíče (existující nepřepisování)

  3. Základy tabulkových výrazů, část 12 – Inline tabulkové funkce

  4. CRUD pro MySQL a PHP