Den skal bruges så snart du har oprettet forbindelse til databasen - eller også skal MySQL-serveren sættes op, så de ting SET NAMES sætter (se linket), bruges som standardværdier til alle forbindelser.
I phpmyadmin, ændres "collation" med f.eks. flg. ALTER TABLE `guest_book` CHANGE `message` `message` TEXT CHARACTER SET utf8 COLLATE utf8_danish_ci NOT NULL
Well, der er jeg så godt nok på bar bund, for umiddelbart i min lille verden, er det blot et spm. om "sortering", d.v.s. hvad du gemmer og allerede har gemt, vil være det samme.
F.eks. "Rødgrød med fløde" vil være det samme i tabellen, både før og efter.
Problemet er at hvis jeg vil udskrive den variabel med værdien "Rødgrød med fløde" som har et ISO tegnsæt og der i html'en er defineret UTF-8, så vil bogstavet Ø blive ulæseligt. Derfor er jeg nødt til at ændre tegnsættet for værdierne i tabellerne til UTF-8.
Der er ingen smarte kommandoer, der pludselig ændrer indholdet i alle felter i alle tabeller i databasen. Du kan ved læsning, fx i PHP, ændre tegnsættet. Men ellers er anbefalingen at holde sig til samme tegnsæt hele vejen.
Der er godt nok mange forskellige begreber at hitte ud af: encoding, codepage, unicode, ascii. Det er svært nogle gange at finde rundt i når man begynder at læse på nettet om emnet. Er "unicode" det samme som UTF-8 ?
Nej. Unicode er en standard der har til hensigt at kunne udtrykke og behandle alle verdens skriftsystemer på en sammenhængende måde. Unicode-standarden tildeler bl.a. værdier til hvert enkelt muligt tegn - p.t. er der ca. 100.000 tegn i Unicode.
UTF-8 er en encoding (tegnsæt) som kan bruges til dette formål. Af andre encodings kan nævnes UTF-16 og UTF-32, der normalt bruger hhv. 2 og 4 bytes per tegn (UTF-16 bruger faktisk 4 byte til visse tegn, men disse forekommer sjældent).
UTF-8 har den fordel at den kan nøjes med en enkelt byte til bl.a. a-z, 0-9 (samt visse specialtegn - mere præcist, kræves 1 byte til alle tegn med en værdi under 128) - der kræves kun flere bytes til ting som andre skriftsystemer og tegn med accenter. Samtidigt er den velegnet til brug med systemer der ikke understøtter Unicode: fordi UTF-16 og UTF-32 begge bruger flere bytes, vil der eks. være en masse 0-bytes i sådan noget som eks. kildekode (der primært bruger engelsk som sprog til kommandoer m.v.). Det er der mange systemer der har det mindre godt med, men problemet undgås med UTF-8, fordi tegnene gemmes på samme måde.
Mht. at konvertere de eksisterende data, så kan du eksportere dem, ændre CREATE TABLE-sætninger så de bruger UTF-8, gemme dit SQL-script som UTF-8, og så importere det igen.
Collation angiver kun sorteringsrækkefølge - CHARACTER SET skal også sættes for at du er sikker på tabellen kan gemme dataene korrekt (dermed ikke sagt at du ikke skal bruge en passende collation, men det er ikke den del der forhindrer dig i at gemme og hente Unicode fra databasen).
pidgeot -> det var en god løsning det med at eksportere, ændre definitionen af tegnsæt til utf-8 og gemme sql-filen i utf-8. God løsning. Det giver point til dig. Du skal blot ligge et svar i det rigtige spm http://www.eksperten.dk/spm/855404
Du kan også ligge et svar her da du også har svaret på dette spm.
Men har jeg forstået rigtigt at man bruger SET NAMES utf8 for at fortælle mysql at i denne connection skal alle vædier indsættes i tabellen med formatet utf8 ?
Nej, SET NAMES angiver intet om tegnsæt der bruges til indsættelse - for det afhænger af tegnsættet der bruges til tabellen. Forbindelsen kan godt bruge et andet tegnsæt, i hvilket tilfælde MySQL skulle konvertere fra det ene til det andet. I praksis vil man dog nok sørge for at de bruger det samme tegnsæt - for ellers kan man jo ikke læse alt det man har gemt (eller omvendt, man kan ikke gemme alt det man sender ind).
Den nye PHP-funktion gør sandsynligvis noget af det samme - jeg har dog ikke kigget nærmere på den, så det kan være den er mere avanceret på den ene eller den anden måde.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.