FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Nykomling
|
Har stött på ett litet problem. Jag har en ganska så stor mysql-databas som jag exporterat från MySQL 4.0.24 på mitt webbhotell till min testserver som kör 5.någonting. Databasen är dumpad och uppackad till en .sql och allt är frid och fröjd så långt.
Jag stöter dock direkt på patrull när jag vill importera den. Anledningen är att det finns en hel del fältnamn som innehåller å, ä och ö. Det är ju iofs heldumt att använda specialtecken i fältnamnen men så långt tänkte jag inte för fem år sedan när den skapades. Jag har lyckats importera/exportera mellan servrar förut och det har gått bra med lite --default-character-set-modifieringar. Då har jag dock bara flyttat mellan mysql 4 till 4. Så fort jag nu försöker importera får jag bara felmeddelanden om fel på SQL-syntaxen direkt när den stöter på ett av dessa fältnamn med svenska tecken i. Problemet är alltså inte att de svenska tecknen konverteras till skumma tecken, utan att MySQL totalvägrar att överhuvudtaget röra fältnamn med svenska tecken i. Finns det någon lösning på detta som inte innebär att döpa om fältnamnen i originaldatabasen (vilket kommer att medföra modifieringar i kilometervis med kod)? Servern jag flyttar från kör latin1 som character set, men --default-character-set=latin1 vid importen löser inga som helst problem. |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Har WN som tidsfördriv
|
Du kan inte byta teckenuppsättning på mysql bara "sådär".
Dock tror jag att ditt problem snarare är ett filsystemsproblem, jag gissar att du gör importen med mysqlimport eller mysql <finfin.sql ? Din nya server kör säkrt UTF-8 som filsystem, och din gamla kör säkert nån iso. Konvertera din dump till utf-8 och importera. |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Nykomling
|
Citat:
Lyckades dock till slut med en liten annan väg. Såg att *.sql-filen som mysqldump gjort åt mig hade några rader i början som såg intressanta ut. Ändrade raden: Kod:
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8*/; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; Kod:
/*!40101 SET NAMES latin1 */; ![]() |
||
![]() |
![]() |
![]() |
#4 | |||
|
||||
Bara ett inlägg till!
|
Om du skapar dumpen med mysqldump (vilket du borde göra) så se till att använda r-flaggan för att säga vilken fil du ska dumpa till:
mysqldump --opt --quote-names -r dumpfil.sql databasnamn1 Och när du importerar: echo "SOURCE dumpfil.sql;" | mysql databasnamn2 Detta har i alla fall jag funnit vara ett pålitligt sätt att flytta mellan olika servrar och versioner av MySQL. (--quote-names är en viktig flagga! Jag vet inte hur många gånger jag fått dumpar av kunder som inte går smidigt att importera på grund av att de använt kolumnnamn som 'date' och andra reserverade ord) |
|||
![]() |
![]() |
Svara |
Ämnesverktyg | |
Visningsalternativ | |
|
|