Načrtovanje in razvoj spletnih aplikacij

Podatkovni tipi

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, INT in BIGINT.
  • 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, DATETIME ali TIMESTAMP.
  • Č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:

  • UNSIGNED pomeni, da stolpec ne vsebuje negativnih vrednosti,
  • AUTO_INCREMENT pomeni, da se vrednost samodejno povečuje,
  • ZEROFILL je 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:

  • TINYTEXT in TINYBLOB
  • TEXT in BLOB
  • MEDIUMTEXT in MEDIUMBLOB
  • LONGTEXT in LONGBLOB

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.

  • JSON je 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 INT s PRIMARY KEY in AUTO_INCREMENT.
  • Za denarne vrednosti uporabi DECIMAL, ne FLOAT.
  • Za krajša besedila uporabi VARCHAR, za daljša pa TEXT.
  • Za datume uporabi DATE, za datum in čas pa DATETIME ali TIMESTAMP.
  • 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 DATE ali DATETIME.
  • Uporaba tipa FLOAT za 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 NULL pri obveznih podatkih.
  • Zamenjevanje podatkovnega tipa ENUM in SET.
  • 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.