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

mySQL - matchende input fra latin (engelsk) til utf8 (ikke-engelsk) data

En mulig løsning ville være at oprette en anden kolonne i databasen ved siden af ​​"artist", som "artist_normalized". Her kan du, mens du udfylder tabellen, indsætte en "normaliseret" version af strengen. Søgning kan derefter udføres i kolonnen artist_normalized.

En testkode:

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

Magien udføres af Transliterator-klassen. Den angivne regel udfører tre handlinger:dekomponerer strengen, fjerner diakritiske tegn og omkomponerer derefter strengen, kanoniseret. Transliterator i PHP er bygget oven på ICU, så ved at gøre dette stoler du på tabellerne i ICU-biblioteket, som er komplette og pålidelige.

Bemærk:denne løsning kræver PHP 5.4 eller nyere med intl udvidelse.




  1. Hvordan virker SQL-injection, og hvordan beskytter jeg mig imod det

  2. Opbygning af en meget tilgængelig database til Moodle ved hjælp af PostgreSQL

  3. MySQL Indsæt række, på duplikat:Tilføj suffiks og genindsæt

  4. Hvad er forskellen mellem INNER JOIN, LEFT JOIN, RIGHT JOIN og FULD JOIN?