Collatie is alleen van invloed op het sorteren van tekst, het heeft geen effect op de werkelijke tekenset van opgeslagen gegevens.
Ik zou deze configuratie aanbevelen:
-
Stel de tekenset voor de hele DB in alleen, zodat u deze niet voor elke tafel afzonderlijk hoeft in te stellen. Tekenset wordt overgenomen van DB naar tabellen naar kolommen. Gebruik
utf8
als de tekenset. -
Stel de tekenset voor de DB-verbinding in . Voer deze query's uit nadat u verbinding heeft gemaakt met de database:
SET CHARACTER SET 'utf8' SET NAMES 'utf8'
-
Stel de tekenset voor de pagina in , met behulp van HTTP-header en/of HTML-metatag. Een van deze is genoeg. Gebruik
utf-8
als decharset
.
Dit zou genoeg moeten zijn.
Als u de juiste sortering van Spaanse tekenreeksen wilt hebben, stelt u sortering in voor de hele database. utf8_spanish_ci
zou moeten werken (ci
betekent Hoofdlettergevoelig ). Zonder de juiste sortering zouden Spaanse tekens met accenten altijd als laatste worden gesorteerd.
Opmerking :het is mogelijk dat de tekenset van gegevens die u al in een tabel hebt, is verbroken, omdat uw tekensetconfiguratie eerder verkeerd was. U moet het eerst controleren met een DB-client om dit geval uit te sluiten. Als het defect is, voert u uw gegevens opnieuw in met de juiste tekensetconfiguratie.
Hoe tekenset werk in een database
-
objecten heb een tekenset attribuut, dat expliciet kan worden ingesteld of wordt overgenomen (server> database> tabel> kolom), dus de beste optie is om het voor de hele database in te stellen
-
clientverbinding heeft ook een tekenset attribuut en het vertelt de database in welke codering u de gegevens verzendt
Als de tekensets van de clientverbinding en het doelobject verschillen, worden de gegevens die u naar de database verzendt automatisch geconverteerd van de tekenset van de verbinding naar de tekenset van het object.
Dus als je bijvoorbeeld de gegevens in utf8
. hebt , maar klantverbinding ingesteld op latin1
, zal de database de gegevens breken, omdat het zal proberen om utf8
. te converteren alsof het latin1
. is .