Bij het opzetten van een database in MySQL moet de gebruiker aan elke kolom in een tabel een naam en een datatype toewijzen. Dit proces helpt het systeem precies te begrijpen welk type gegevens wordt opgeslagen en hoe deze moeten worden verwerkt, en bepaalt daarnaast hoeveel geheugen nodig is.
Er zijn verschillende hoofdklassen van datatypen in MySQL-tabellen, waaronder numerieke, teken-, datum- en tijdtypen, en andere. Elke klasse bevat meerdere specifieke datatypen. Het is belangrijk om deze correct te definiëren tijdens de initiële fase van het aanmaken van tabellen om problemen te voorkomen zodra de volledige databasestructuur is opgebouwd.
Dit artikel beschrijft de belangrijkste MySQL-datatypen, hun structuur, geldige waarden en aanbevolen gebruik.
MySQL ondersteunt alle standaard numerieke SQL-datatypen die worden gebruikt om getallen op te slaan. Dit artikel behandelt:
Gehele getallen
Kommagetallen (floating point)
Vaste-kommagetallen (fixed point)
Elk type wordt hieronder verder toegelicht.
Gehele getaltypen worden gebruikt om gesigneerde of ongesigneerde gehele getallen op te slaan. Gesigneerde typen kunnen zowel positieve als negatieve waarden bevatten, terwijl ongesigneerde typen alleen positieve waarden opslaan, waardoor het bereik effectief wordt verdubbeld.
Er zijn vijf hoofdtypen gehele getallen: TINYINT, SMALLINT, MEDIUMINT, INT en BIGINT. Het belangrijkste verschil is het waardenbereik dat ze kunnen opslaan — hoe groter het bereik, hoe meer geheugen nodig is. Het is belangrijk om het juiste type te kiezen voor efficiënt geheugengebruik.
|
Type |
Geheugen (bytes) |
Gesigneerd bereik |
Ongesigneerd bereik |
|
TINYINT |
1 |
−2⁷ tot 2⁷−1 |
0 tot 2⁸−1 |
|
SMALLINT |
2 |
−2¹⁵ tot 2¹⁵−1 |
0 tot 2¹⁶−1 |
|
MEDIUMINT |
3 |
−2²³ tot 2²³−1 |
0 tot 2²⁴−1 |
|
INT |
4 |
−2³¹ tot 2³¹−1 |
0 tot 2³²−1 |
|
BIGINT |
8 |
−2⁶³ tot 2⁶³−1 |
0 tot 2⁶⁴−1 |
Het specificeren van een lengte (bijv. MEDIUMINT(6)) heeft geen invloed op het waardenbereik. Het is puur cosmetisch en wordt door sommige tools gebruikt om kortere getallen met spaties op te vullen.
Met het attribuut ZEROFILL worden in plaats daarvan nullen gebruikt. Bijvoorbeeld:
SMALLINT(8) ZEROFILL toont 256 als 00000256.
Deze typen worden gebruikt om benaderende numerieke waarden op te slaan. MySQL laat toe om de precisie als volgt te definiëren:
FLOAT(p)
Waarbij p de precisie is van 0 tot 53.
Als p < 25, wordt FLOAT (enkele precisie) gebruikt.
Anders wordt DOUBLE (dubbele precisie) gebruikt.
|
Type |
Geheugen (bytes) |
Waardenbereik |
|
FLOAT |
4 |
~±3,4028 × 10³⁸ |
|
DOUBLE |
8 |
~±1,7976 × 10³⁸ |
Vaste-kommagetallen worden gebruikt om exacte waarden met een gespecificeerde precisie op te slaan. Hiervoor worden DECIMAL of NUMERIC gebruikt, meestal bij financiële berekeningen waar afronding niet acceptabel is.
Definitie:
DECIMAL(M, D)
M: totaal aantal cijfers (max. 65, standaard 10)
D: aantal cijfers na de komma (0–30, standaard 0)
Voorbeeld:
DECIMAL(6, 3)
Slaat waarden op van -999.999 tot 999.999.
DECIMAL en NUMERIC zijn functioneel gelijk.
Voor het opslaan van korte teksten gebruikt MySQL voornamelijk CHAR en VARCHAR. Ze lijken op elkaar, maar verschillen in opslagwijze.
CHAR slaat een tekenreeks met vaste lengte op (0 tot 2⁸−1 tekens), gedefinieerd bij het aanmaken van de tabel. Kortere invoer wordt opgevuld met spaties.
VARCHAR slaat een tekenreeks met variabele lengte op (0 tot 2¹⁶−1 tekens). Alleen de daadwerkelijke tekens worden opgeslagen, plus 1 byte om de lengte vast te leggen.
Als een tekenreeks langer is dan toegestaan voor CHAR of VARCHAR, wordt deze afgekapt.
Als CHAR en VARCHAR in één tabel worden gecombineerd, converteert MySQL CHAR automatisch naar VARCHAR.
|
String |
CHAR(5) |
VARCHAR(5) |
|
'A' |
'A ' |
'A' |
|
'Hello' |
'Hello' |
'Hello' |
|
'Example' |
'Examp' |
'Examp' |
Het datatype TEXT wordt gebruikt voor grote tekstgegevens, terwijl BLOB bedoeld is voor binaire gegevens zoals afbeeldingen, gecompileerde code of audio.
Belangrijkste verschillen:
BLOB: sortering en vergelijkingen zijn hoofdlettergevoelig
TEXT: sortering en vergelijkingen zijn niet hoofdlettergevoelig
MySQL kan TEXT- en BLOB-velden niet volledig indexeren en ondersteunt geen sortering via volledige veldindexen.
Als de invoer groter is dan toegestaan, wordt deze afgekapt.
|
Type |
Geheugen (bytes) |
Max. tekens |
|
TINYTEXT |
2⁸−1 |
tot 2⁸−1 |
|
TEXT |
2¹⁶−1 |
tot 2¹⁶−1 |
|
MEDIUMTEXT |
2²⁴−1 |
tot 2²⁴−1 |
|
LONGTEXT |
2³²−1 |
tot 2³²−1 |
|
Type |
Geheugen (bytes) |
Max. bytes |
|
TINYBLOB |
2⁸−1 |
tot 2⁸−1 |
|
BLOB |
2¹⁶−1 |
tot 2¹⁶−1 |
|
MEDIUMBLOB |
2²⁴−1 |
tot 2²⁴−1 |
|
LONGBLOB |
2³²−1 |
tot 2³²−1 |
MySQL biedt verschillende datatypen voor datum- en tijdinformatie:
|
Type |
Geheugen (bytes) |
Beschrijving |
|
DATE |
3 |
Alleen datum in formaat YYYY-MM-DD |
|
DATETIME |
8 |
Datum en tijd in YYYY-MM-DD HH:MM:SS |
|
TIMESTAMP |
4 |
Zoals DATETIME, maar kleiner bereik (1970–2038) |
|
TIME |
3 |
Tijd van −838:59:59 tot 838:59:59 |
|
YEAR |
1 |
Jaar in YYYY-formaat |
MySQL ondersteunt sinds versie 5.7.8 een native JSON-datatype met de volgende voordelen:
Automatische validatie van geldige JSON
Geoptimaliseerde binaire opslag voor snellere queries
Het geheugengebruik is vergelijkbaar met LONGTEXT.
MySQL biedt speciale tekentypen met vooraf gedefinieerde waarden:
ENUM: slaat één waarde op uit een lijst (tot 2 bytes)
SET: kan meerdere waarden tegelijk opslaan (tot 26, max. 8 bytes)
ENUM('a', 's', 'd')
Toegestane waarden: 'a', 's', 'd'
SET('a', 's', 'd')
Toegestane combinaties:'a', 's', 'd', 'a,s', 'a,d', 's,d', 'a,s,d' of ''
Dubbele invoer zoals ('a','s','a') wordt automatisch ontdubbeld en opgeslagen als 'a,s'.
Dit artikel behandelde de meest gebruikte MySQL-datatypen voor het definiëren van tabelkolommen. Met deze kennis kunnen gebruikers geschikte datatypen kiezen en hun databasestructuur efficiënt ontwerpen. Voor minder gangbare datatypen wordt verwezen naar de officiële MySQL-documentatie.
Met Hostman cloud-databases kun je praktisch werken met MySQL en zijn datatypen. Belangrijke voordelen zijn:
Onderhoud en configuratie door de provider
Hoge beschikbaarheid en betrouwbaarheid
Automatische back-ups
Snelle horizontale en verticale schaalbaarheid
Continue werking via clusterreplicatie
Gebruik van cloudplatform-compute-resources