Pri ustvarjanju tabel moramo za vsak stolpec določiti podatkovni tip. Podatkovni tip pove, kakšne vrednosti lahko stolpec vsebuje, na primer cela števila, decimalna števila, besedilo, datum ali čas.
Pravilna izbira podatkovnega tipa je pomembna, ker vpliva na preglednost podatkov, porabo prostora, hitrost delovanja in pravilnost shranjenih vrednosti. Stolpec za leto rojstva zato ne potrebuje enakega podatkovnega tipa kot stolpec za e-poštni naslov ali daljši opis.
Pomni: Podatkovni tip izberemo glede na pomen podatka. Za starost ali število točk uporabimo številski tip, za ime besedilni tip, za datum rojstva pa časovni tip.
V MySQL oziroma MariaDB se pri začetnem delu najpogosteje uporabljajo številski, časovni in besedilni podatkovni tipi. Posebni tipi, kot sta JSON in prostorski tipi, se uporabljajo pri zahtevnejših podatkovnih modelih.
Vsebina strani
Osnovna pravila
Podatkovni tip določimo ob ustvarjanju tabele. Pri tem določimo, kakšne vrednosti bo stolpec lahko hranil in kako naj jih podatkovna baza obravnava.
- Za cela števila uporabljamo tipe, kot so
TINYINT,INTinBIGINT. - Za natančna decimalna števila, na primer cene, uporabimo
DECIMAL. - Za krajša besedila najpogosteje uporabimo
VARCHAR. - Za daljša besedila uporabimo enega izmed tipov
TEXT. - Za datume in čas uporabimo tipe
DATE,TIME,DATETIMEaliTIMESTAMP. - Če podatek ne sme manjkati, stolpcu dodamo določilo
NOT NULL.
Pozor: Podatkovnega tipa ne izbiramo samo po tem, kakšen je primer podatka danes, ampak tudi po tem, kakšne vrednosti se lahko pojavijo pozneje.
Številski podatkovni tipi
Številske tipe uporabljamo za shranjevanje celih in decimalnih števil. Pri številskih tipih je pomembno, ali potrebujemo cela števila, decimalne vrednosti ali zelo velike številčne vrednosti.
Nekateri številski tipi lahko uporabljajo dodatne lastnosti:
UNSIGNEDpomeni, da stolpec ne vsebuje negativnih vrednosti,AUTO_INCREMENTpomeni, da se vrednost samodejno povečuje,ZEROFILLje starejši način prikaza vodilnih ničel in se pri novih rešitvah praviloma ne uporablja več.
Pomni: Vodilne ničle, na primer pri šifrah ali kodah, je pogosto bolje shraniti kot besedilo ali jih oblikovati pri izpisu, ne pa uporabljati zastarelega pristopa ZEROFILL.
Najpogostejši številski tipi so:
| Podatkovni tip | Opis | Primer uporabe |
|---|---|---|
BIT |
Bitno polje za zelo kratke binarne vrednosti. | posebne zastavice ali binarni podatki |
TINYINT |
Majhen celoštevilski tip. | logična vrednost, majhna ocena, stanje |
SMALLINT |
Celoštevilski tip za manjša števila. | število točk, leto v manjšem obsegu |
MEDIUMINT |
Celoštevilski tip srednje velikosti. | večje število zapisov ali šifer |
INT |
Najpogosteje uporabljen celoštevilski tip. INTEGER je sinonim za INT. |
identifikator, število ogledov, količina |
BIGINT |
Tip za zelo velika cela števila. | zelo veliki identifikatorji ali števci |
FLOAT |
Decimalno število s plavajočo vejico, pri katerem lahko pride do zaokroževanja. | približne meritve |
DOUBLE |
Decimalno število s plavajočo vejico z večjo natančnostjo kot FLOAT. |
znanstveni izračuni, približne vrednosti |
DECIMAL |
Natančno decimalno število z določenim številom mest. | cene, zneski, finančni podatki |
Za denarne zneske je praviloma primernejši tip DECIMAL kot FLOAT ali DOUBLE, ker omogoča natančen zapis decimalnih vrednosti.
Časovni podatkovni tipi
Časovne tipe uporabljamo za shranjevanje datuma, časa ali kombinacije obojega. MySQL med časovne tipe uvršča DATE, TIME, DATETIME, TIMESTAMP in YEAR.
| Podatkovni tip | Opis | Primer vrednosti |
|---|---|---|
DATE |
Datum v obliki leto-mesec-dan. | 2026-03-20 |
TIME |
Čas v obliki ura:minuta:sekunda. | 14:30:00 |
DATETIME |
Kombinacija datuma in časa. | 2026-03-20 14:30:00 |
TIMESTAMP |
Časovni žig. Pogosto ga uporabljamo za beleženje časa vnosa ali spremembe zapisa. | 2026-03-20 14:30:00 |
YEAR |
Podatkovni tip za shranjevanje leta. | 2026 |
Pomni: Datuma praviloma ne shranjujemo kot navadno besedilo, saj ga potem težje razvrščamo, primerjamo in obdelujemo. Za datum uporabimo tip DATE ali ustrezen časovni tip.
Primeri funkcij za trenutni datum in čas:
SELECT CURDATE(), CURRENT_DATE;
SELECT CURTIME(), CURRENT_TIME;
SELECT CURRENT_TIMESTAMP, SYSDATE(), NOW();
Zgornje funkcije vrnejo trenutni datum, trenutni čas ali trenutni datum in čas.
Besedilni podatkovni tipi
Besedilne tipe uporabljamo za shranjevanje imen, naslovov, opisov, e-poštnih naslovov in drugih nizov znakov. MySQL med znakovne in binarne tipe uvršča CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM in SET.
CHAR in VARCHAR
CHAR in VARCHAR uporabljamo za shranjevanje krajšega besedila. Razlika je v tem, da ima CHAR fiksno dolžino, VARCHAR pa spremenljivo dolžino.
Če imamo na primer CHAR(4) in vnesemo niz 'ab', se zapis obravnava kot vrednost s fiksno dolžino štirih znakov. Pri VARCHAR(4) pa se shrani samo dejansko vneseno besedilo in dodatna informacija o dolžini.
| Vrednost | CHAR(4) |
VARCHAR(4) |
Razlaga |
|---|---|---|---|
'' |
fiksna dolžina | spremenljiva dolžina | Pri prazni vrednosti VARCHAR porabi manj prostora kot fiksni tip. |
'ab' |
shrani se v polju fiksne dolžine | shrani se dejanska dolžina niza | Pri krajših nizih je VARCHAR običajno primernejši. |
'abcd' |
vrednost zapolni celotno dolžino | vrednost zapolni dovoljeno dolžino | Oba tipa lahko hranita največ štiri znake, če sta določena kot (4). |
BINARY in VARBINARY
Tipa BINARY in VARBINARY sta podobna tipoma CHAR in VARCHAR, vendar shranjujeta binarne podatke namesto navadnega besedila.
TEXT in BLOB
TEXT uporabljamo za daljše besedilo, BLOB pa za binarne podatke, na primer slike ali druge datoteke. V podatkovnih bazah pogosto raje hranimo pot do datoteke, samo datoteko pa shranimo v datotečni sistem.
Poznamo več velikosti tipov TEXT in BLOB:
TINYTEXTinTINYBLOBTEXTinBLOBMEDIUMTEXTinMEDIUMBLOBLONGTEXTinLONGBLOB
Oštevilčenje – ENUM
ENUM uporabljamo, kadar želimo stolpcu dovoliti eno izmed vnaprej določenih vrednosti.
CREATE TABLE enum_test (
velikost ENUM('majhno', 'srednje', 'veliko')
);
INSERT INTO enum_test (velikost)
VALUES ('majhno'), ('veliko');
Tip ENUM je uporaben, kadar ima stolpec le nekaj dovoljenih vrednosti, na primer velikost, status ali vrsto uporabnika.
Množica – SET
SET je podatkovni tip, ki lahko vsebuje nič, eno ali več vrednosti iz vnaprej določene množice.
CREATE TABLE set_test (
korak SET('ena', 'dva')
);
INSERT INTO set_test (korak) VALUES ('');
INSERT INTO set_test (korak) VALUES ('ena');
INSERT INTO set_test (korak) VALUES ('dva');
INSERT INTO set_test (korak) VALUES ('ena,dva');
Za razliko od tipa ENUM lahko tip SET vsebuje več izbranih vrednosti hkrati.
Posebni podatkovni tipi
Poleg osnovnih številskih, časovnih in besedilnih tipov MySQL podpira tudi posebne podatkovne tipe. Pri začetnem delu jih praviloma ne potrebujemo, koristno pa je vedeti, da obstajajo.
JSONje namenjen shranjevanju podatkov v obliki JSON.- Prostorski podatkovni tipi so namenjeni shranjevanju geografskih in geometrijskih podatkov.
Pozor: Posebnih podatkovnih tipov ne uporabljamo zato, ker so naprednejši, ampak takrat, ko ustrezajo naravi podatkov. Za preprosta besedila, števila in datume so osnovni tipi navadno boljša izbira.
Primerjava pogostih podatkovnih tipov
Pri izbiri podatkovnega tipa je koristno primerjati, kaj posamezen tip predstavlja in kdaj ga uporabimo.
| Podatek | Primeren tip | Primer vrednosti |
|---|---|---|
| identifikator zapisa | INT |
1, 2, 3 |
| cena izdelka | DECIMAL(8,2) |
19.99 |
| uporabniško ime | VARCHAR(50) |
'ana' |
| daljši opis | TEXT |
opis izdelka ali objave |
| datum rojstva | DATE |
2008-05-12 |
| čas oddaje obrazca | DATETIME ali TIMESTAMP |
2026-03-20 14:30:00 |
| status naročila | ENUM ali VARCHAR |
'oddano', 'poslano' |
Primer uporabe podatkovnih tipov
V naslednjem primeru ustvarimo tabelo izdelki, kjer uporabimo več različnih podatkovnih tipov:
CREATE TABLE izdelki (
id INT PRIMARY KEY AUTO_INCREMENT,
naziv VARCHAR(100) NOT NULL,
opis TEXT,
cena DECIMAL(8,2) NOT NULL,
zaloga INT UNSIGNED NOT NULL,
datum_vnosa DATETIME DEFAULT CURRENT_TIMESTAMP
);
Tabela vsebuje celoštevilski identifikator, besedilni naziv, daljši opis, natančen decimalni znesek, količino zaloge in čas vnosa zapisa.
Priporočila
- Za identifikatorje najpogosteje uporabi
INTsPRIMARY KEYinAUTO_INCREMENT. - Za denarne vrednosti uporabi
DECIMAL, neFLOAT. - Za krajša besedila uporabi
VARCHAR, za daljša paTEXT. - Za datume uporabi
DATE, za datum in čas paDATETIMEaliTIMESTAMP. - Za stolpce, kjer vrednost ne sme manjkati, uporabi
NOT NULL. - Vodilne ničle pri šifrah raje obravnavaj kot oblikovanje izpisa ali uporabi besedilni tip.
Pogoste napake
- Shranjevanje datumov kot navadno besedilo namesto uporabe tipa
DATEaliDATETIME. - Uporaba tipa
FLOATza denarne zneske, kjer je potrebna natančnost. - Izbira prekratkega tipa
VARCHAR, zaradi česar podatka ni mogoče pravilno shraniti. - Uporaba prevelikih podatkovnih tipov brez potrebe.
- Manjkajoče določilo
NOT NULLpri obveznih podatkih. - Zamenjevanje podatkovnega tipa
ENUMinSET. - Uporaba zastarelih možnosti, kot je
ZEROFILL, za oblikovanje prikaza števil.
Pri izbiri podatkovnega tipa moramo vedno razmisliti, kaj bomo v stolpec shranjevali in kako bomo te podatke pozneje iskali, primerjali, razvrščali ali računali.