MySQL Tahák

Datové Typy

Tato stránka obsahuje přehled datových typů, které v MySQL databázi můžeme použít. Dají se rozdělit na tři skupiny: číselné, řetězcové a datumové.

Číselné datové typy

BIT(velikost)

Tento datový typ uchovává bitovou hodnotu. Počet bitů si můžeme určit zapsáním do závorky. Minimální počet bitů je 1 a maximální je 64. Defaultní velikost je 1 bit.

CREATE TABLE moje_tabulka
(
    bity BIT(8) # sloupec s bitovou hodnotou o délce 8 bitů
);
 
INSERT INTO moje_tabulka (bity) # vložení bitové hodnoty do tabulky
VALUES (b'01101011');
 
SELECT LPAD(BIN(bity), 8, '0') AS bity # získání bitové hodnoty z tabulky
FROM moje_tabulka;

TINYINT

Tento datový typ uchovává celé číslo od -128 do 127. Pokud jej specifikujeme jako UNSIGNED, tak bude uchovávat celé číslo od 0 do 255.

CREATE TABLE cisla
(
    prvni_cislo TINYINT, # tento sloupec bude uchovávat čísla od -128 do 127
    druhe_cislo TINYINT UNSIGNED # tento sloupec bude uchovávat čísla od 0 do 255
);

SMALLINT

Tento datový typ uchovává celé číslo od -32768 do 32767. Pokud jej specifikujeme jako UNSIGNED, tak bude uchovávat celé číslo od 0 do 65535.

CREATE TABLE cisla
(
    prvni_cislo SMALLINT, # tento sloupec bude uchovávat čísla od -32768 do 32767
    druhe_cislo SMALLINT UNSIGNED # tento sloupec bude uchovávat čísla od 0 do 65535
);

MEDIUMINT

Tento datový typ uchovává celé číslo od -8388608 do 8388607. Pokud jej specifikujeme jako UNSIGNED, tak bude uchovávat celé číslo od 0 do 16777215.

CREATE TABLE cisla
(
    prvni_cislo MEDIUMINT, # tento sloupec bude uchovávat čísla od -8388608 do 8388607
    druhe_cislo MEDIUMINT UNSIGNED # tento sloupec bude uchovávat čísla od 0 do 16777215
);

INT

Tento datový typ uchovává celé číslo od -2147483648 do 2147483647. Pokud jej specifikujeme jako UNSIGNED, tak bude uchovávat celé číslo od 0 do 4294967295.

CREATE TABLE cisla
(
    prvni_cislo INT, # tento sloupec bude uchovávat čísla od -2147483648 do 2147483647
    druhe_cislo INT UNSIGNED # tento sloupec bude uchovávat čísla od 0 do 4294967295
);

INTEGER

Tento datový typ je stejný jako datový typ INT, který je jeho zkratkou.

BIGINT

Tento datový typ uchovává celé číslo od -9223372036854775808 do 9223372036854775807. Pokud jej specifikujeme jako UNSIGNED, tak bude uchovávat celé číslo od 0 do 18446744073709551615.

CREATE TABLE cisla
(
    prvni_cislo BIGINT, # tento sloupec bude uchovávat čísla od -9223372036854775808 do 9223372036854775807
    druhe_cislo BIGINT UNSIGNED # tento sloupec bude uchovávat čísla od 0 do 18446744073709551615
);

DECIMAL(počet číslic, počet číslic za desetinnou čárkou)

Tento datový typ přesně uchovává číslo s desetinnou částí. V závorce si můžeme určit maximální počet číslic před i za desetinnou čárkou. Minimum je 1, maximum je 65 a defaultní hodnota je 10. Dále si tam také určujeme kolik číslic může být za desetinnou čárkou. Minimum je 0, maximum je 30 a defaultní hodnota je 0. Pokud při vkládání položky do tabulky předáme větší číslo než je možné, tak se nastaví nejvyšší možné číslo. Pokud předáme číslo s více číslicemi za desetinnou čárkou než je možné, tak se číslo zaokrouhlí.

CREATE TABLE cisla
(
    prvni_cislo DECIMAL(30, 2), # číslo s maximálním počtem 30 číslic a 2 číslicemi za desetinnou čárkou
    druhe_cislo DECIMAL(35, 5) # číslo s maximálním počtem 35 číslic a 5 číslicemi za desetinnou čárkou
);

DEC(počet číslic, počet číslic za desetinnou čárkou)

Tento datový typ je zkratkou pro datový typ DECIMAL.

FLOAT

Tento datový typ uchovává číslo s desetinnou částí. Zabírá 4 bajty. Výpočty jsou narozdíl od DECIMAL přibližné, ale výhodou je že může ukládat větší číslo s použitím méně místa. Nepřesnosti se mohou objevit kolem 7 číslic.

CREATE TABLE cisla
(
    prvni_cislo FLOAT,
    druhe_cislo FLOAT
);

DOUBLE

Tento datový typ uchovává číslo s desetinnou částí. Zabírá 8 bajtů. Výpočty jsou narozdíl od DECIMAL přibližné, ale výhodou je že může ukládat větší číslo s použitím méně místa. Nepřesnosti se mohou objevit kolem 15 číslic.

CREATE TABLE cisla
(
    prvni_cislo FLOAT,
    druhe_cislo FLOAT
);

BOOL

Tento datový typ uchovává hodnotu true nebo false (pravdu nebo nepravdu). MySQL ale tyto hodnoty v tabulce ukládá jako čísla (TINYINT). Pokud se číslo rovná nule, jedná se o false, jinak se jedná o true.

CREATE TABLE users
(
    username VARCHAR(30),
    verified BOOL DEFAULT false # sloupec uchovávající true nebo false
);
 
INSERT INTO users (username) VALUES ('Karel');
 
SELECT username, IF(verified, 'true', 'false') AS verified # abychom z tabulky nezískali číselnou hodnotu ale true nebo false, tak k tomu můžeme použít funkci IF
FROM users;

BOOLEAN

Tento datový typ je stejný jako datový typ BOOL, který je jeho zkratkou.

Řetězcové datové typy

CHAR(počet znaků)

Tento datový typ uchovává textový řetězec, který obsahuje přesný počet znaků. Počet znaků si můžeme určit zapsáním do závorky. Defaultní hodnota je 1 a maximální je 255. Pokud do tabulky vložíme řetězec, který bude mít více znaků než je nastaveno, tak se řetězec ořízne (neuloží se celý). Pokud vložíme řetězec, který bude mít méně znaků než je nastaveno, tak se k němu přidají mezery (tyto mezery se smažou když řetězec z databáze přečteme). Datový typ CHAR se hodí pro text, který má stejnou délku, bude to rychlejší.

CREATE TABLE users
(
    username CHAR(30) # tento sloupec bude uchovávat řetězce o přesné délce 30 znaků
);

VARCHAR(maximální počet znaků)

Tento datový typ uchovává textový řetězec, který má menší nebo stejný počet znaků jako maximální nastavený počet znaků. Maximální počet znaků si můžeme určit zapsáním do závorky. Můžeme jej nastavit až na 65535 znaků.

CREATE TABLE users
(
    username VARCHAR(30) # tento sloupec bude uchovávat řetězce o maximální délce 30 znaků
);

TEXT

Tento datový typ uchovává textový řetězec o maximální délce 65535 bajtů. Rozdíl mezi datovým typem TEXT a VARCHAR je ten, že TEXT se neukládá přímo v tabulce, ale někde jinde. V tabulce se na něj jen odkazuje. Na video o datových typech TEXT, TINYTEXT, MEDIUMTEXT a LONGTEXT se můžete podívat zde.

TINYTEXT

Tento datový typ uchovává textový řetězec o maximální délce 255 znaků.

MEDIUMTEXT

Tento datový typ uchovává textový řetězec o maximální délce 16777215 znaků.

LONGTEXT

Tento datový typ uchovává textový řetězec o maximální délce 4294967295 znaků.

BINARY(velikost)

Tento datový typ je stejný jako datový typ CHAR. Rozdíl je ale v tom že MySQL bude brát data ve sloupci jak surové bajty než jako zakódovaný text. (alespoň myslím)

VARBINARY(velikost)

Tento datový typ je stejný jako datový typ VARCHAR. Rozdíl je ale v tom že MySQL bude brát data ve sloupci jak surové bajty než jako zakódovaný text. (alespoň myslím)

BLOB, TINYBLOB, MEDIUMBLOB, LONGBLOB

Tyto datové typy uchovávají 'Binary Large Objects'.

ENUM

Pomocí tohoto datového typu můžeme specifikovat seznam řetězců, které můžeme do sloupce ukládat. Pokud se do sloupce pokusíme uložit řetězec, který není v seznamu, tak se uloží prázdný řetězec.

CREATE TABLE shirts (
    name VARCHAR(40),
    size ENUM('x-small', 'small', 'medium', 'large', 'x-large') # vytvoření seznamu řetězců, které do sloupce můžeme uložit
);
 
INSERT INTO shirts (name, size)
VALUES ('dress shirt','large'), ('t-shirt','medium'), ('polo shirt','small'); # vložení nových položek do tabulky

SET

Pomocí tohoto datového typu můžeme specifikovat hodnoty, které mohou vkládané řetězce do tabulky obsahovat. Jednotlivé hodnoty ve vkládaném řetězci oddělujeme čárkou. Pokud nějakou hodnotu do řetězce napíšeme vícekrát, použije se jen jednou. Myslím že následující ukázka kódu ukazuje datový typ SET lépe než text.

CREATE TABLE tabulka
(
    sloupec SET('a', 'b', 'c', 'd') # vytvoření seznamu hodnot, které řetězce budou moci obsahovat
);
 
INSERT INTO tabulka (sloupec) VALUES # vložení nových položek do tabulky
    ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d'); # jednotlivé hodnoty v řetězci oddělujeme čárkou
 
SELECT * FROM tabulka;
/*
vypíše se:
+----------+
| sloupec  |
+----------+
| a,d      |
| a,d      |
| a,d      |
| a,d      |
| a,d      |
+----------+
*/

Datumové datové typy

DATE

Tento datový typ uchovává datum ve formátu YYYY-MM-DD (rok-měsíc-den).

CREATE TABLE datumy
(
    datum DATE # tento sloupec bude uchovávat datumy
);
 
INSERT INTO datumy (datum) VALUES ('2021-08-14'); # vložení datumu do tabulky

TIME

Tento datový typ uchovává čas ve formátu hh:mm:ss (hodiny:minuty:sekundy). Podporovaný rozsah je od '-838:59:59' do '838:59:59'.

CREATE TABLE casy
(
    cas TIME # tento sloupec bude uchovávat časy
);
 
INSERT INTO casy (cas) VALUES ('20:15:00'); # vložení času do tabulky

DATETIME

Tento datový typ uchovává dohromady datum a čas ve formátu YYYY-MM-DD hh:mm:ss (rok-měsíc-den hodiny:minuty:sekundy).

CREATE TABLE datumy_s_casy
(
    datum_a_cas DATETIME # tento sloupec bude uchovávat datumy s časy
);
 
INSERT INTO datumy_s_casy (datum_a_cas) VALUES ('2021-08-14 20:15:00'); # vložení datumu s časem do tabulky

YEAR

Tento datový typ uchovává rok ve formě čtyř číslic.

CREATE TABLE roky
(
    rok YEAR # tento sloupec bude uchovávat roky
);
 
INSERT INTO roky (rok) VALUES ('2021'); # vložení roku do tabulky

TIMESTAMP

Tento datový typ uchovává datum s časem od '1970-01-01 00:00:01' do '2038-01-09 03:14:07'. V databázi zabere jen 4 bajty oproti DATETIME, který zabere 8 bajtů.

CREATE TABLE datumy_s_casy
(
    datum_a_cas TIMESTAMP # tento sloupec bude uchovávat datumy s časy
);
 
INSERT INTO datumy_s_casy (datum_a_cas) VALUES ('2021-08-14 20:15:00'); # vložení datumu s časem do tabulky