FAQ |
Kalender |
2008-11-11, 18:17 | #1 | ||
|
|||
Klarade millennium-buggen
|
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. |
||
Svara med citat |
2008-11-11, 18:28 | #2 | |||
|
||||
Har WN som tidsfördriv
|
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); ?> |
|||
Svara med citat |
2008-11-19, 00:11 | #3 | ||
|
|||
Nykomling
|
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åäö"); ?> http://www.utf8-chartable.de/unicode-utf8-table.pl HAVE IT |
||
Svara med citat |
2008-11-19, 12:19 | #4 | |||
|
||||
Mycket flitig postare
|
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:
|
|||
Svara med citat |
2008-11-19, 18:27 | #5 | ||
|
|||
Klarade millennium-buggen
|
Tack alla och speciellt Crassy för bra tips! Nu ere fixat!
|
||
Svara med citat |
Svara |
|
|