MySQL - CSV

Det er vigtigt at du anvender Chrome eller Firefox til disse opgaver, da PHPMyAdmin følger webstandarderne. Hvis du anvender Safari, Internet Explorer eller Edge, risikerer du at få fejl.

Comma Separated Values

Skal man indtaste meget data kan det betale sig at anvende csv filer. Det er filer hvor man ved hjælp af simple tekstfiler kan indtaste store mængder data. Se eksemplet f.eks. tabellen herunder:

Initialer f_Navn e_navn Mobil Mail
bs1 Anders Andersen 23344556 aa@fakemail.dk
bs2 Bente bentsen 23344557 bb@fakemail.dk
bs3 Carl Carlsen 23344558 cc@fakemail.dk
bs4 Dorte Dotsen 23344559 dd@fakemail.dk
bs5 Egon Egonsen 23344560 ee@fakemail.dk
bs6 Frederikke Frederiksen 23344561 ff@fakemail.dk

Det kan man skrive ind i en tekstfil, ved at lade rækkerne være adskilt af linjeskift og kolonnerne af kommaer (,). Læg mærke til at den første række indeholder kolonne navnene.

initialer,f_navn,e_navn,Mobil,Mail 
bs1,Anders,Andersen,23344556,aa@fakemail.dk 
bs2,Bente,bentsen,23344557,bb@fakemail.dk
bs3,Carl,Carlsen,23344558,cc@fakemail.dk
bs4,Dorte,Dotsen,23344559,dd@fakemail.dk
bs5,Egon,Egonsen,23344560,ee@fakemail.dk
bs6,Frederikke,Frederiksen,23344561,ff@fakemail.dk

Du kan hente denne lille csv fil her: bestyrelse_csv.csv.

Man skal være opmærksom på at CSV ikke er en fast standard, og at man ikke kan være sikker på at det er kommaer der adskiller de enkelte felter.

Microsoft anvender f.eks. semikolon (;) som separator, og det betyder at man skal gøre programmet opmærksom på at det ikke er komma der separerer. Der kommer et eksempel på dette lidt senere

Importer CSV-fil

Man kan importere csv-filer ved at vælge sin database og vælge menuen Importer. Vælg databasen mentorer og herefter menuen Importer.

Klik på knappen Vælg fil og find filen bestyrelse_csv.csv

Når den er valgt skal du sætte formatet til CSV og sætte flueben i "Den første linje af filen indeholder tabellens kolonnenavne"

Herefter kan du trykke Udfør

Når databasen er lagt ind kan du se den nye tabel ved at klikke på menuen Struktur:

Vi skal lige have ændret navnet på tabellen, og det gør vi ved at klikke på tabellen Table 4 og vælge menuen Operationer (du skal måske kigge under menuen Mere). Her ændrer vi navnet til bestyrelse.

Klik på Udfør, og se resultatet ved at vælge hele databasen igen og se resultatet:

Som det sidste ændrer posten initialer til at være primærnøgle for tabellen.

Læg mærke til at længderne af datatyperne er sat efter csv-filen. Det kan være nødvendigt at justere på datatyperne og/eller længderne af dem, hvis der senere skal ændres i listen.

Importer postnumre

Her vil vi importere de danske postnumre. Oprindeligt kommer tabellen fra Postnord's hjemmeside, men til denne opgave har jeg omdannet den til csv-format.

Hent filen postnummerfil.csv og importer den i en database.

Ofte får man leveret datafiler i excel-format. Det kræver at man i Excel gemmer filen i csv-format. Du skal være opmærksom på at Microsoft ikke gemmer filen korrekt, men med semikolonner (;) i stedet for kommaer (,).

Derfor skal du ændre feltet "Kolonner adskilt med:" fra , til ;.

Når du importeret tabellen skal du vælge menuen Vis:

Læg mærke til at phpMyAdmin kommer med en advarsel: "Current selection does not contain a unique column". Tabellen har altså ikke en PRIMÆR nøgle, og det betyder, at vi ikke kan rette, kopiere og slette i tabellen. Det skal vi have ændret. Gå ind i menuen Struktur og sæt Postnr. til at være PRIMÆR nøgle. Læg mærke til at det udløser en fejl.

Årsagen hertil er, at bl.a. postnummeret 1055 forekommer mere end en gang, hvilket betyder at feltet ikke kan være en primærnøgle. Det betyder enten:

  1. ... at vi må rette og ændre i tabellen manuelt for at fjerne dubletter af postnumre.
  2. ... at vi må oprette en "mange-til-mange" relation.
  3. ... at vi vælger at leve med, at denne tabel ikke har en primærnøgle.

I dette tilfælde vælger vi den 3. mulighed, og det kan vi gøre fordi det ikke er en tabel vi vedligeholder og skal rette i, men at den kommer fra Postnord.

Som det sidste ændrer vi tabellens navn til "postnr" ved at gå ind i menuen Operationer og blokken Tabel-indstillinger.

Flere databaser

På nettet findes der flere fri databaser der er tilgængelige i CSV format. Prøv f.eks. denne: https://think.cs.vt.edu/corgis/csv/index.html

Her finder man f.eks. en musikdatabase: https://think.cs.vt.edu/corgis/csv/music/music.html

Disse databaser kan være ret store, og det betyder at der skal ændres på standardindstillingerne i XAMPP. Helt konkret skal vi have ændret på størrelsen af de filer, som PHPMyAdmin vil acceptere. For at undgå at komme i problemer med størrelsen sætter vi den til 100MB.

... på Windows

Start Geany og åbn filen php.ini i mappen C:\xampp\php, og indsæt følgende i bunden.

post_max_size = 100M 
upload_max_filesize = 100M 
max_execution_time = 5000 
max_input_time = 5000 
memory_limit = 1000M 

Gem filen og åbn herefter filen my.ini i mappen C:\xampp\mysql\bin

Ret linien max_allowed_packet, så den får størrelsen 100M

max_allowed_packet = 100M

Herefter genstartes Apache og MySQL i XAMPP, og PHPMyAdmin genindlæses hvis det ikke har været lukket ned.

... på Mac

For at redigere i konfigurationsfilerne skal du åbne terminalen og indtaste følgende kommando.

sudo nano /private/etc/php.ini.default

Indtast dit kodeord, og nano starter.

Tast Ctrl+W+V så cursoren går til slutningen af dokumentet.

Kopier nedestående og indsæt det

post_max_size = 100M 
upload_max_filesize = 100M 
max_execution_time = 5000 
max_input_time = 5000 
memory_limit = 1000M 

Gem filen ved at trykke:

  • Ctrl+X
  • Y
  • Enter

Herefter ændres der i filen my.cnf

sudo nano /Applications/XAMPP/xamppfiles/etc/my.cnf

Ændr feltet max_allowed_packet, så det får værdien 100:

Nano er en meget effektivt tekst program, og derfor har det også søgefunktioner:

For at finde en tekststreng taster man Ctrl+W+V, og så kan man indtaste tekststrengen.

Hvis den findes i teksten flytter cursoren til selve tekstrengen.

max_allowed_packet = 100M

Gem filen som ovenfor

Herefter genstartes Apache og MySQL i XAMPP, og PHPMyAdmin genindlæses hvis det ikke har været lukket ned.