MySQL-datatypen: overzicht, gebruiksvoorbeelden en best practices
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.
Numerieke typen Link kopiëren
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 getallen (Integers) Link kopiëren
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.
Kommagetallen (Floating-point numbers) Link kopiëren
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 (Fixed-point numbers) Link kopiëren
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.
Tekentypen (Character types) Link kopiëren
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.
Vergelijking van CHAR(5) en VARCHAR(5) Link kopiëren
|
String |
CHAR(5) |
VARCHAR(5) |
|
'A' |
'A ' |
'A' |
|
'Hello' |
'Hello' |
'Hello' |
|
'Example' |
'Examp' |
'Examp' |
Tekst- en binaire typen Link kopiëren
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.
TEXT-typen Link kopiëren
|
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 |
BLOB-typen Link kopiëren
|
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 |
Datum en tijd Link kopiëren
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 |
JSON Link kopiëren
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.
Samengestelde typen (Composite types) Link kopiëren
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)
Voorbeeld Link kopiëren
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'.
Conclusie Link kopiëren
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