Kom ihåg mig?
Home Menu

Menu


Konvertera teckenkodning i mysql

Ämnesverktyg Visningsalternativ
Oläst 2008-11-11, 18:17 #1
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Som rubriken säger, vissa kolumner och tabeller i databasen har hamnat i en enda röra rent teckenkodningsmässigt.
Jag vet att man aldrig ska hamna i den situationen, men jag sitter där och vet inte hur jag ska lyckas.
Saken är den att det genom tiderna har blandats teckenkodningar lite ostrukturerat, en kolumn här med UTF8, en där med latin1 (iso-8859-1 för att vara exakt).

Hur gör jag nu för att få allt till utf-8 så det blir ordning och reda? Att konvertera själva databaserna har jag inte hittat rätt i, försöker istället konvertera en dump av databasen. Iconv slår bakut och slutar med error när den stöter på tecken som inte ska finnas där, annars vore det smidigast.

Finns det något funktion eller script som kan tugga igenom en textfil och konvertera det giltiga utf8-kombinationerna som den hittar utan att bry sig om andra tecken som den stöter på?
Eller tvärtom, konvertera lösa åäöÅÄÖüÜéÉ till utf8 utan att hetsa upp sig över att det redan finns utf-8 tecken i filen?
Lite fel får det bli, det kan man alltid fixa, bara jag slipper göra sök och byt.
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-11-11, 18:28 #2
crazzys avatar
crazzy crazzy är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2007
Inlägg: 1 089
crazzy crazzy är inte uppkopplad
Har WN som tidsfördriv
crazzys avatar
 
Reg.datum: Aug 2007
Inlägg: 1 089
Läsa in den med php? Typ:
Kod:
<?php
$text = file_get_contents('dinfil.sql');
$text = utf8_encode($text);
file_put_contents('dinfil_utf8.sql',$text);
?>
Borde inte det funka?
crazzy är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-11-19, 00:11 #3
sixten sixten är inte uppkopplad
Nykomling
 
Reg.datum: Jun 2008
Inlägg: 11
sixten sixten är inte uppkopplad
Nykomling
 
Reg.datum: Jun 2008
Inlägg: 11
Kan Du inte tuta igenom de kolumner som har en blandning av Latin-1 och UTF-8 och översätta Latin-1 bara:
Detta funkar för åäö
Kod:
<?php
echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8;" >';
$latin1=array("\xE5","\xE4","\xF6");
$utf8=array("\xC3\xA5","\xc3\xa4","\xc3\xb4");
$source="abcåäö";
echo $source.'<br>';
echo str_replace($latin1,$utf8,"abcåäö");
?>
Du kan själv fylla i resten. Tag hjälp från ex:

http://www.utf8-chartable.de/unicode-utf8-table.pl

HAVE IT
sixten är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-11-19, 12:19 #4
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Annars är väldigt enkelt att konvertera i MySQL direkt i tabellerna, och då blir det också rätt rakt igenom.

Gör en UPDATE med CONVERT(spalt USING utf8), det kan hända att du först behöver behöver omvandla det till binary.
Eller kör något likt:
ALTER TABLE tabellen CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci

Att köra skript som omvandlar enskilda tecken är som upplagt för att missa ovanliga tecken - låt MySQL göra det så blir det rätt (har du väl gjort det en gång så tar det bara nån minut att få till det istället för att skriva långa skript - det är ju bra svårt att isolera och omvandla en spalt i en sql-dump).

Citat:
Finns det något funktion eller script som kan tugga igenom en textfil och konvertera det giltiga utf8-kombinationerna som den hittar utan att bry sig om andra tecken som den stöter på?
Som en parantes, om du har en fil med blandade tecken är det egentligen omöjligt att fräsa igenom filen med något skript eftersom teckenkoder kan samtidigt vara giltiga i olika teckenuppsättningar och det inte finns något sätt (annat än att gissa) att avgöra om det ska omvandlas eller vara kvar.
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-11-19, 18:27 #5
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Tack alla och speciellt Crassy för bra tips! Nu ere fixat!
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 16:18.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017