Avatar billede rubberduckone Nybegynder
02. marts 2008 - 21:02 Der er 16 kommentarer

Simpel import af .txt fil til tabel

Hej,

Er newbie i MySQL og sidder og eksperimenterer med lidt dataimport.
Har lavet en .txt fil i excel 2003 med nogle gadenavne i DK (gemt som .txt med 'unicode text) . Vil nu importere disse til tabel 'gadenavne' i MySQL (har tjekket encoding i JEdit - den er utf8)

Min MySQL tabel ser ud som følger:
CREATE TABLE adresser
(
GADENAVN VARCHAR(60) NOT NULL,
SORT_PRIO TINYINT UNSIGNED NOT NULL
)
ENGINE=INNODB;

Jeg har så placeret min .txt fil i 'data' folderen, for at slippe for, at taste lange stier og måske gøre det forkert. Derfor forsøger jeg direkte med:

LOAD DATA INFILE adresser.txt
INTO TABLE adresser
CHARACTER SET utf8
COLLATE utf8_danish_ci;

Har ydermere forsøgt COLLATE med både latin1 og utf8_bin for deres respektive characters sets - uden held.

Synes jeg fra googlede forums på www.mysql.com kan se at der er visse problemer med disse imports..???

Er der nogen der kan hjælpe med, hvordan det gøres lettetst og mest elegant og sådan at de danske æ,ø,å også virker... // ;o)


På forhånd mange tak for hjælpen.
Avatar billede arne_v Ekspert
03. marts 2008 - 00:13 #1
Hvad er problemet ?
Avatar billede rubberduckone Nybegynder
03. marts 2008 - 21:58 #2
Nåh ja - det var måske nok så væsentligt... // ;o)

Problemet er, at den ikke genkender æ,ø,å eller andre 'nordiske' karakterer for den sags skyld. Skulle jo ellers mene, at jeg med utf8 er dækket tilstrækkeligt ind på den front...

Jeg kører det udelukkende via command client i MySQL, men så snart jeg sætter character set og collate på, får jeg denne fejlbesked:

"ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'adres
ser.txt"

Eneste måde at opnå succesfuld import, er uden character set og collate specifikation, dvs. med udelukkende:
LOAD DATA INFILE 'adresser.txt'
INTO TABLE adresser;

Desværre ser alle ikke ASCII karakterer, så til gengæld helt håbløse ud...

Men jeg er jo næppe den første med denne type problem, så jeg vil gerne høre hvordan i andre er komet rundt om den problemstilling??
Avatar billede arne_v Ekspert
04. marts 2008 - 04:06 #3
Mener du ikke:

LOAD DATA INFILE 'adresser.txt'
...

?

Og hvilken version af MySQL ? (tegnsæt er noget af det som har ændret sig meget
mellem versionerne)
Avatar billede rubberduckone Nybegynder
05. marts 2008 - 00:09 #4
øhm... - spørgsmål ikke helt forstået?
(hvad er forskellen på min streng og det du skriver???)

Version 5.0.22-comunity-nt på WinXP.
Avatar billede arne_v Ekspert
05. marts 2008 - 01:44 #5
'' omkring filnavn
Avatar billede rubberduckone Nybegynder
05. marts 2008 - 22:05 #6
Nåeh - nu er jeg med. <blush>

Plingerne om filnavnet er jeg med på og de er der...

De manglede simpelthen i mit første indlæg (risikoen når man skriver tingene ind). Det er den i min kommentar af 03.03. 21:58, som jeg anvender.
Avatar billede arne_v Ekspert
06. marts 2008 - 02:40 #7
Som jeg læser docs kan man bruge CHARACTER SET xxx, men jeg kan ikke se noget
om COLLATE xxx - har du prøvet kun med CHARACTER SET og ingen COLLATE ?
Avatar billede rubberduckone Nybegynder
06. marts 2008 - 15:57 #8
Det har jeg nu - stadig samme resultat.

En kollega nævnte, at det måske ville være en god ide, at sætte CHAR SET helt oppe på DB-niveau. Så det har jeg så også prøvet - uden held. Altså har jeg nu forsøgt:

1. Default DB med standard CHAR SET (vistnok latin1) - dårligt til DK bogstaver
2. Default DB med tabel, hvor CHAR og COLLATE har været sat til utf8, utf8_bin / utf8_danish_ci.
3. Default DB med tabel, hvor kun CHAR SET sættes ved LOAD DATA...

4. Dedikeret DB, CHAR SET sat indledningsvist på DB niveau til utf8
5. Dedikeret DB, CHAR SET sat på både DB og tabel niveau til utf8. LOAD DATA med og uden CHAR SET sat.
6. Dedikeret DB, hvor kun CHAR SET sættes ved LOAD DATA...

Pt. kan jeg ganske enkelt ikke få danske bogstaver ind og ud af mine tabeller. Men det virker ikke sandsynligt, at det skulle være korrekt.

Så mit spørgsmål er vel nærmest - hvordan gør i andre for at få æ, ø, å ind i jeres tabeller??
Avatar billede arne_v Ekspert
07. marts 2008 - 04:47 #9
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.45-community-nt MySQL Community Edition (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use test;
Database changed
mysql> load data infile 'C:\\dansketegn.txt'
    -> into table t1
    -> character set utf8;
Query OK, 1 row affected, 2 warnings (0.00 sec)
Records: 1  Deleted: 0  Skipped: 0  Warnings: 2

mysql>
Avatar billede arne_v Ekspert
07. marts 2008 - 04:58 #10
Og da jeg lige fixede indholdet af filen, så jeg slap af med warnings, så
kom ÆØÅ også korrekt ind.
Avatar billede rubberduckone Nybegynder
07. marts 2008 - 09:15 #11
Den eneste måde jeg har kunnet 'fixe' mit problem på, har været ved at lave dem om til æ->ae, ø->oe, å->aa og det er jo egentlig ikke noget man kan kalde en løsning.

Ellers er din load "data... ->character set utf8;", så vidt jeg kan se, identisk med den kode jeg anvender.

Så arne - hvad 'fixede' du ved filen?  // ;o)
Avatar billede rubberduckone Nybegynder
07. marts 2008 - 10:21 #12
...har i dokumentationen set bemærkninger om: Lines terminated by '\t\n'

Men kan ikke rigtig gennemskue, om det gør sig gældende i mit tilfælde. Jeg har i udgangspunktet tænkt mig, at anvende Excel (2003 Pro UK, SP2) til eksport af basisinfo under opbygningen af mine tabelstrukturer (altså til eksport af den første lille mængde af data, som jeg idag har i diverse regneark).

Derfor har jeg valgt, at eksportere Exceltabellerne først i .txt og senest .csv format. For .txt prøvede jeg først med 'unicode' (af hensyn til utf8) - siden 'tab delimited' og altså senest med .csv formattet. Men desværre altsammen uden held hvad angår æ,ø,å.

Tænker på om det her giver mening at anvende: 'Lines terminated by... '??
Avatar billede arne_v Ekspert
08. marts 2008 - 03:03 #13
Jeg lavede filen om så den passede til MySQL's besynderlige defaults.

Men det er vel ikke relevant.

Du siger jo at du får syntax fejl når du bruger CHARACTER SET UTF8.

Og den kommer jo før filen overhovedet læses.
Avatar billede arne_v Ekspert
06. april 2008 - 06:06 #14
Kommet videre ?
Avatar billede rubberduckone Nybegynder
06. april 2008 - 20:13 #15
Ikke rigtig.

Har prøvet flere forskellige variationer, men ikke fundet løsningen endnu.
Må nok bare tumle lidt videre med problemet. Skal nok vende tilbage til det, men lige pt. har jeg nedprioriteret det lidt og koncentrerer mig i stedet om designet af basen.
Avatar billede rubberduckone Nybegynder
29. marts 2013 - 15:34 #16
Hej Arne,
Skylder dig vist lidt point rá denne gamle tråd. Jeg gik kold på spørgsmålet og har ikke haft interesse for at vende tilbage, men din indsats bør jo alligevel belønnes // ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester