sslug-teknik team mailing list archive
-
sslug-teknik team
-
Mailing list archive
-
Message #89039
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