Samling påvirker kun tekstsortering, det har ingen effekt på det faktiske tegnsæt af lagrede data.
Jeg vil anbefale denne konfiguration:
-
Indstil tegnsættet for hele DB kun, så du ikke behøver at indstille det for hvert bord separat. Tegnsæt nedarves fra DB til tabeller til kolonner. Brug
utf8
som tegnsæt. -
Indstil tegnsættet for DB-forbindelsen . Udfør disse forespørgsler, efter du har oprettet forbindelse til databasen:
SET CHARACTER SET 'utf8' SET NAMES 'utf8'
-
Indstil tegnsættet for siden , ved hjælp af HTTP-header og/eller HTML-metatag. En af disse er nok. Brug
utf-8
somcharset
.
Det burde være nok.
Hvis du vil have korrekt sortering af spanske strenge, skal du indstille sortering for hele databasen. utf8_spanish_ci
burde virke (ci
betyder Uskift mellem store og små bogstaver ). Uden korrekt sortering ville spanske tegn med accent altid blive sorteret til sidst.
Bemærk :det er muligt, at det tegnsæt af data, du allerede har i en tabel, er brudt, fordi din tegnsætkonfiguration var forkert tidligere. Du bør tjekke det ved hjælp af en DB-klient først for at udelukke denne sag. Hvis det er brudt, skal du bare genindsætte dine data med den rigtige tegnsætkonfiguration.
Hvordan er tegnsæt arbejde i en database
-
objekter har et tegnsæt attribut, som kan indstilles eksplicit, eller den er nedarvet (server> database> tabel> kolonne), så den bedste mulighed er at indstille den til hele databasen
-
klientforbindelse har også et tegnsæt attribut, og det fortæller databasen, i hvilken kodning du sender dataene
Hvis klientforbindelsens og målobjektets tegnsæt er forskellige, konverteres de data, du sender til databasen, automatisk fra forbindelsens tegnsæt til objektets tegnsæt.
Så hvis du f.eks. har dataene i utf8
, men klientforbindelse indstillet til latin1
, vil databasen bryde dataene, fordi den vil forsøge at konvertere utf8
som om det er latin1
.