sql >> Database >  >> RDS >> Mysql

mySQL - overeenkomende Latijnse (Engelse) formulierinvoer met utf8 (niet-Engelse) gegevens

Een mogelijke oplossing zou zijn om een ​​andere kolom in de database aan te maken naast "artist", zoals "artist_normalized". Hier kunt u, terwijl u de tabel vult, een "genormaliseerde" versie van de tekenreeks invoegen. Er kan vervolgens worden gezocht in de kolom artist_normalized.

Een testcode:

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

Resultaat:

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

De magie wordt gedaan door de Transliterator-klasse. De opgegeven regel voert drie acties uit:ontleedt de tekenreeks, verwijdert diakritische tekens en stelt vervolgens de tekenreeks opnieuw samen, gecanoniseerd. Transliterator in PHP is bovenop ICU gebouwd, dus door dit te doen vertrouwt u op de tabellen van de ICU-bibliotheek, die compleet zijn en betrouwbaar.

Opmerking:deze oplossing vereist PHP 5.4 of hoger met de intl extensie.




  1. IF...THEN logica gebruiken in SQL Server

  2. Waarom is deze Hibernate MySQL-verbinding alleen-lezen?

  3. Hoe een set tekens op te halen met SUBSTRING in SQL?

  4. SQLite JSON_EACH()