sql >> Database >  >> RDS >> Mysql

Accentongevoelige zoekopdracht in MySQL

U kunt de sortering tijdens runtime wijzigen in de sql-query,

...where title like '%torun%' collate utf8_general_ci

maar pas op dat het veranderen van de collatie tijdens runtime de mogelijkheid uitsluit dat mysql een index gebruikt, dus de prestaties op grote tabellen kunnen verschrikkelijk zijn.

Of u kunt de kolom naar een andere kolom kopiëren, zoals searchable_title , maar verander de sortering erop. Het is eigenlijk gebruikelijk om dit soort dingen te doen, waarbij je gegevens kopieert maar deze in een iets andere vorm hebt die is geoptimaliseerd voor een specifieke werklast/doel. U kunt triggers gebruiken als een leuke manier om de gedupliceerde kolommen gesynchroniseerd te houden. Deze methode heeft het potentieel om goed te presteren, indien geïndexeerd.

Opmerking - Zorg ervoor dat uw db echt die tekens heeft en niet html-entiteiten. Ook is de tekenset van uw verbinding van belang. Het bovenstaande gaat ervan uit dat het is ingesteld op utf8, bijvoorbeeld via set namen zoals set names utf8

Zo niet, dan heb je een introducer nodig voor de letterlijke waarde

...where title like _utf8'%torun%' collate utf8_general_ci

en natuurlijk moet de waarde in de enkele aanhalingstekens daadwerkelijk utf8-gecodeerd zijn, zelfs als de rest van de sql-query dat niet is.



  1. Maanden tussen twee datums

  2. Hoe geef ik letterlijk de datum op bij het schrijven van SQL-query's vanuit SQL Server die is gekoppeld aan Oracle?

  3. MICROSECONDE() Voorbeeld – MySQL

  4. Debuggen van MySQL-triggers