← Back to team overview

sslug-teknik team mailing list archive

Re: UTF8 konvertering og mysql

 



On Fri, 18 Aug 2006, Kristian Nørgaard wrote:


Sagen er at jeg har forsøgt at kopiere et helt website fra en computer A til B, ved at kopiere samtlige filer og dernæst exportere mysql-databasen fra computer A og importere den på computer B.

Når jeg så afprøver web-sitet, får jeg en mærkelig fejl, som - ifølge nogle indlæg jeg har fundet på nettet - sikkert skyldes noget UTF8 halløj. Noget med at mysql ved en fejl konverterer til UTF8, selv om data allerede er i UTF8...

Og UTF8 ved jeg ikke en dyt om.


I tidernes morgen brugte fjernskrivere 5 bit til at repræsentere et tegn med. Det var dengang meget vigtigt at holde tegnlængden nede, da man transmiterede med hastigheder på under 60 baud. Desværre havde hver sin fabrikant hvert sit tegnsæt og det forsøgte man at gøre noget ved med vedtagelsen af ASCII tegnsættet i 1967. ASCII er et 7 bit tegnsæt som bygget op om det engelske sprog. For at anvende dansk eller andre sprog byttede man blot bestemte ikke særligt brugte tegn ud med vore nationale. Det viste sig med opfindelsen af mikrodatamaten at være en kedelig ting, da man for at få maskeprogrameter en rom skulle bestille 20000 enheder. På den tid var det umuligt at afsætte så mange computere i et land som danmark, så man måtte benytte sig af langt dyrere prom eller eprom løsninger. Et andet problem er at data-transport over landegrændsen er besværlig og skal ske med stor omhu.

Løsningen er de forskellige iso-8859-xx tegnsæt, som bedre er kendt under navnet latin tegnsættet. Disse tegnsæt er på 8 bit og de dækker hver især en større region. I danmark benyttes latin-1 som standard, hvilket med euroens inførsel har fået en afløser i latin-15. Det er temmeligt kedeligt, at man ikke var klog nok, til at anvende det allerede eksisterende sol-tegn som valuta-tegn; men absolut skulle sende nogen politiske signaler med opfindelsen af et nyt tegn.

Komminikation foregår i dag på verdensplan, så derfor har man med det ædelt formål at give ethvert tænkeligt tegn på kloden et unikt nummer, skabt unicode. Det betyder at man skal bruge flere bits til at få plads til alle tegn. Computere er ligeglade, da de idag bruger 32 bit som maskinord; men både lagerplads og båndbredde bliver knap når man lige pludselig skal bruge 4 gange så meget plads, som før til det samme indhold. Dertil kommer at 99.99 procent af alle tekster i danmark aldrig bruger mere end 127 forskellige tegn. Derfor har man fundet på UTF-8 hvor man bruger ASCII-tegnsættet som basis (8 bit), men hvor andre tegn deriblandt vore nationale, kodes med 2 til 4 tegn. Det betyder at en national tekst kan vokse med cirka 20-30 procent i forhold til en latin-1 tekst. Hvad jeg mener om UTF-8 skal jeg nok holde for mig selv; men blot konstantere at UTF-8 filer skal fortolkes, hvorimod andre filer blot kan anvendes som de er.

En UTF-8 fil ser nogen lunde således ud: " HovedformÃ¥let er, at fortælle en god historie om Danmark og danskerne - gerne med et glimt i øjet." Som det ses, er det altså nogenlunde nemt at gætte sig til, at der er tale om UTF-8 fil. Man kan også med varierende held få 'file' til at gætte, hvilket tegnsæt der er tale om.

Problemmet med forskellige tegnsæt er altså ikke af ny dato, så derfor findes GNU programmet recode til convertere mellem et par hundrede forskellige tegnsæt. Hvis man har en ældre version kaldes programmet som 'recode frategnsæt:tiltegnsæt filnavn'. Nutildags bruges 'recode frategnsæt..tiltegnsæt filnavn'. Eksempel 'recode utf-8..latin1 mindatabase'. Hvis man ikke angiver noget filnavn benyttes stdin til input. Der følger en ret stor info-dokumentation med programmet.

Er der nogen der kan hjælpe med at få kopieret databasen fra A og til B, på en sund måde?

Lav et dump af databasen til en fil.

Prøv at finde ud af tegnsættet med file eller ved at kigge på filen med f.eks. mc.

Brug programmet recode til at konvertere til det rigtige format.

Importer filen.

Mvh. Bo

Follow ups

References