Home Ontwerp je site PHP Datatypes in MySQL

Datatypes in MySQL

Als je grote hoeveelheden op een website moet gaan opslaan, is de beste keuze meestal om de inhoud in een database op te slaan.

Op het internet wordt dan meestal gebruik gemaakt van MySQL omdat het gemakkelijk samenwerkt met de scripttaal PHP en wijd verspreid is bij tal van hostingbedrijven.

Mocht je alle data lukraak opslaan in je database zou het na verloop van tijd een enorme puinhoop worden. Daarom bestaat er zoiets als een id (identificatienummer) die elke gegevenset (een record) een uniek nummer toekent.

Om de snelheid van het opvragen van de gegevens te bevorderen, wordt ook elk type data "gelabeld";. Data kan immers verschillende vormen aanwenden: gewone nummers, nummers met kommagetallen, jaartallen, complete datums, tekstjes, hele lappen tekst,...

Bij het opslaan in een database bepalen we vooraf om welk soort type de data die we zullen opslaan gaat. We noemen dit het datatype of gegevenstype.

Hieronder vind je een overzicht van alle mogelijke datatypes die je kunt gebruiken in MySQL. Om het overzicht te bewaren heb ik de datatypes gerangschikt onder 3 noemers, namelijk "getallen","datums" en "tekst".

getallen

  • tinyint (alle waarden beginnend van -128 tot 128)
    Ideaal om een leeftijd in te voeren aangezien een mens nooit ouder dan 128 wordt.
  • smallint (alle waarden beginnend van -32 768 tot 32 767)
    Ideaal om in een kleine tabel te gebruiken als id-nummer.
  • mediumint (alle waarden beginnend van -8 388 608 tot 8 388 607)
    Geldbedragen van een boekhouding.
  • int of integer (alle waarden beginnend van -2 147 283 648 tot 2 147 283 647)
  • bigint (alle waarden beginnend van -9 223 372 036 854 775 808 tot 9 223 372 036 854 775 808)
  • float (alle waarden beginnend van -3,40338 tot -1,175-38)

Datums

  • date (datum in het formaat YYYY-MM-DD)
    Bijvoorbeeld: 2006-05-04
  • datetime (datum en tijd in het formaat YYYY-MM-DD hh:mm:ss)
    Bijvoorbeeld: 2006-05-04 12:52:16
  • time (tijd in het formaat hh:mm:ss)
    Bijvoorbeeld: 12:52:16
  • year (jaar in het formaat YYYY)
    Bijvoorbeeld: 2006

tekst

  • char() met maximaal 255 tekens
  • varchar() met maximaal 255 tekens
  • tinyblob en tinytext met maximaal 255 tekens
  • blob en text met maximaal 65 535 tekens
  • mediumblob en mediumtext met maximaal 16 777 215 tekens
  • longblob en longtext met maximaal 4294 967 295 tekens
  • enum (Waarden kunnen zowel getallen als tekst zijn. Dit gegevenstype duidt vooral aan dat de waarden die hier ingevuld kunnen worden, steeds vast zijn. Ofwel is het het ene, ofwel is het het andere.)
    0 of 1, ja of nee, mannelijk of vrouwelijk, online of offline,...

Opgelet

Bij de eerste 2 gegevenstypes, char() en varchar() staan de haakjes er niet zomaar.

Deze haakjes zijn verplicht en tussen deze haakjes moet je het aantal tekens (of bytes) opgeven dat er maximaal mag ingevuld worden. Wanneer je een gegeven invoert dat langer is, zal dit gewoon afgekapt worden op het aantal dat tussen de haakjes staat.

Waarom verschillende datatypes?

Waarom is een goede keuze van het meest geschikte datatype van belang? De voornaamste reden is snelheid en besparing van geheugen.

Wanneer jij een veld het gegevenstype "tinyint" hebt gegeven, hoeft MySQL heel wat minder actief geheugen te reserveren om de inhoud van dat veld op te vragen, dan wanneer jij dit gewoon "int" als datatype hebt gegeven.

Het is dus belangrijk om bij het opzetten van een tabel in de database eerst goed na te denken wat voor gegeven er moet opgeslagen worden, hoe groot deze waarden (kunnen) worden en op basis hiervan het geschikte datatype te kiezen.

Tip

Hou ook rekening met een eventuele uitbreiding van de database. Het is niet omdat je bedrijf nu maar 100 werknemers telt, dat dit binnen 5 jaar ook nog zo zal zijn.

In de praktijk

In dit voorbeeld gaan we een tabel opzetten met de nodige velden en hiervoor de meest geschikte datatypes kiezen. Stel je wilt een tabel maken waarin je een adressenboek gaat aanleggen van al je medewerkers.

Eerst en vooral moet je bedenken welke velden je allemaal gaat opnemen in deze tabel. In ons voorbeeld zal dat zijn:

  • unieke id;
  • naam;
  • adresgegevens (straat, huisnummer, postcode en gemeente);
  • datum in dienst;
  • wedde;
  • algemene opmerkingen.

Welke datatypes horen hier nu bij?

  • Unieke id:
    Een id zal in dit voorbeeld (en in bijna alle gevallen) uitsluitend een getal zijn. Als we gaan kijken welke datatypes in aanmerking komen voor een getal zijn dat er heel wat: tinyint, smallint, mediumint, int, bigint en float. In dit geval zal tinyint ons te weinig mogelijkheden bieden als ons bedrijf uitgroeit tot een bedrijf met meer dan 128 werknemers. Anderzijds zal ons werknemersaantal nooit de 30 000 overschrijden. Zo hebben we meteen ons geschikte datatype gevonden: smallint (tot 32 767 werknemers)

  • Naam:
    Een naam zal uitsluitend uit tekst bestaan en laten we ervan uitgaan dat een naam nooit groter zal zijn dan 255 tekens. Daarom kiezen we hier voor varchar(255). Voor de straat en de gemeente volgen we dezelfde logica.
  • Huisnummer:
    Dit is een speciaal geval. Een huisnummer is altijd een nummer. Hier gaan we echter niet kiezen voor een getalsdatatype. Dit komt omdat met een huisnummer nooit gerekend zal worden; het zal eigenlijk gewoon als tekst beschouwd worden. Daarom geven we hieraan ook het datatype varchar(). Het aantal tekens kunnen we hier makkelijk begrenzen tot 3 tekens aangezien er geen enkel huisnummer boven de 999 uitkomt. Het datatype wordt dus varchar(3).
  • Postcode volgt dezelfde logica. Aangezien in België een postnummer steeds uit maximaal 4 cijfers bestaat, gebruiken we hier varchar(4).
  • De datum in dienst is een datum. We gaan dus op zoek naar een datumdatatype. Hier moet nagedacht worden hoe je de datum wilt opslaan: wil je enkel de datum, de datum en tijd of enkel de tijd. Het uur wanneer een werknemer voor het eerst is beginnen werken heeft weinig belang dus we nemen enkel de datum: hiervoor is date het geschikste datatype.
  • De wedde wordt mss wel gerekend om bvb de totale loonkost op te tellen. We kiezen hiervoor smallint omdat de wedde van een werknemer nooit meer dan 32 767 EUR zal bedragen.
  • Algemene opmerkingen kan zeer ruim gaan: informatie over de ziektegeschiedenis, gedane projecten,... Omdat de inhoud van dit veld steeds groter wordt naarmate een werknemer langer in dienst blijft, nemen we hiervoor best geen varchar dat begrenst is tot 255 tekens. Text kan 65 535 tekens bevatten en voldoet ruim voor dit veld.

Ziezo, we hebben onze datatypes! We maken een SQL-dump om in onze database in te voeren, deze ziet er als volgt uit:

CREATE TABLE werknemers (
id smallint AUTO_INCREMENT primary key,
voornaam varchar(255),
naam varchar(255),
straat varchar(255),
nummer varchar(3),
postcode varchar(4),
gemeente varchar(255),
datum_in_dienst date,
wedde smallint,
opmerkingen text
);

Onthoud dus vooral uit dit artikel dat je vooraf bij het opzetten van je databasestructuur steeds goed moet nadenken welke soort gegevens in elk veld zullen moeten ingevoerd worden. Begrens deze invoer door een zo passend mogelijk datatype uit te kiezen.


1 + 4 =
 

GOOGLE adsense