Sunteți pe pagina 1din 28

Cap 4.

Tipuri de date MySQL

Consecinele alegerii unui tip de date


Criterii de avut in vedere:
- domeniul de valori posibile pentru acea coloana;
- precizia dorita;
- spaiul ocupat pe hard-disk;
- performanta DBMS in lucrul cu acel tip de date;

InfoAcademy SQL 2015

Tipuri de date MySQL


1. Numerice (intregi, zecimale, vigula fixa, virgula
mobila)
2. Temporale
3. Siruri (de octeti, de caractere)
4. Enumerate

InfoAcademy SQL 2015

Tipuri de date numerice


Proprietati generale:
Tipurile de date MySQL permit memorarea urmtoarelor tipuri de
numere:
- intregi (numere fara parte zecimala);
- raionale. Acestea pot fi memorate in virgula fixa sau in virgula
mobila. Stocarea unora dintre numere in baza de date este subiect
de trunchiere/rotunjire;
Datele numerice sunt implicit cu semn, avand domeniul simetric in
jurul lui zero.
Daca specificam modificatorul UNSIGNED valorile devin pozitive.
Plaja de valori se dubleaza pentru numere intregi (limita superioara
InfoAcademy SQL 2015
4
se dubleaza).

Numere intregi
Tipuri de date si modificatori specifici

Nr.
Tip de date

TINYINT

Sinonime

SMALLINT
MEDIUMINT

Valori posibile, fara


semn

Octei Valori posibile, cu


semn

(unsigned)

-128...127

0...255

-32768...32767

0...65535

-8388608...8388607

0...16777215

InfoAcademy SQL 2015

Limea" unei coloane


In definiia unei coloane cu tip de date intreg se poate specifica,
opional, limea" coloanei - numrul de caractere returnat de MySQL
atunci cand se extrag date de pe acea coloana - prin plasarea sa intre
paranteze imediat dupa tipul de date:
Interfon INT(3)
Limea nu afecteaz nici domeniul de valori posibile, nici spaiul de
stocare ocupat: in exemplul de mai sus, valoarea 124 va fi afiat ca
atare, valoarea 12345 va fi si ea memorata si afiat ca atare, iar
valoarea 12 va fi completata la stnga cu spatii inaintea afirii.

InfoAcademy SQL 2015

Limea" unei coloane (continuare)


Atunci cand nu specificam limea unei coloane, MySQL alege
automat aceasta valoare astfel incat sa cuprind valoarea cea mai
lunga a acelui tip de date (inclusiv eventualul semn minus).
Spre exemplu, o definiie de coloana
Nr TINIYINT va avea o latime implicita de 4 (3 cifre plus semn).
Modificatorul ZEROFILL va face ca valorile sa fie completate cu
cifre 0 in loc de spatii atunci cand au numr de caractere mai mic
dect limea coloanei. Acest modificator solicita automat si
UNSIGNED.

EXEMPLU:
InfoAcademy SQL 2015

Modificatorul AUTO_INCREMENT
Adugat unei coloane cu tip de date numeric, atributul
AUTO_INCREMENT insereaza o noua valoare numerica egala cu
valoarea maxima existenta plus unu.
O tabela SQL poate avea o singura coloana de tip AUTO_INCREMENT
si acea coloana trebuie declarata ca index.
EXEMPLU:

InfoAcademy SQL 2015

Numere fractionare
Numere finite, numere infinite reprezentare trunchiata.
Memorarea numerelor fracionare intr-un sistem de calcul se poate face in
doua moduri:
- in virgula fixa - presupune stabilirea de la bun inceput a numrului de
zecimale;
- in virgula mobila - poziia virgulei in cadrul numrului nu mai este
prestabilita, ci poate varia in funcie de valoarea memorata. Numrul total
de cifre ce pot fi memorate ramane acelai, insa prin schimbarea poziiei
virgulei pot fi obinute numere de diferite anverguri si precizii.
Caracteristici:
- In virgula fixa stabilim de la inceput numarul de zecimale, respectiv pozitia
virgulei;
- In cazul virgulei mobile putem muta virgula atat la dreapta cat si la stanga;
InfoAcademy SQL 2015
9
- In virgula fixa memoram valoarea
exacta asteptata (finita sau rotunjita);

Tipuri de date MySQL pentru numere in virgula fixa


Tip de
date

Sinonime

DECIMA DEC
L
NUMERIC
FIXED

Nr. oct. Valori posibile


(precizi
e)

In funcie de parametrii specificai.


Maxim 65 de cifre in total, din care
maxim 30 de zecimale.

Caracteristici:
- Exista un singur tip de date in virgule fixa: DECIMAL;
- Se configureaza doi parametri: numarul total de cifre admise si
numarul de zecimale;
- Separatorul zecimal si eventualul semn minus nu se iau in calcul;
- Daca incercam sa introducem valori mai mari in sql_mode strict
vom avea o eroare, in modul nonstrict valoarea va fi trunchiata la
valoarea maxima admisa;
InfoAcademy SQL 2015
CREATE TABLE Produse (Denumire
VARCHAR(100), Pret

10

Tipuri de date MySQL pentru numere in virgula


mobila
Valori posibile
Valori posibile
Tip de
date

Sinonime

Nr.
oct.
(preciz
ie)

cu semn

.
unsigned
FLOAT
4
-3.4xl038...3.4 xl038
0...3.4 x IO38
DOUBLE
DOUBLE PRECISION 8
-1.7 x IO308...1.7 x
0...1.7xl0308
REAL este implicit
sinonim
pentru DOUBLE;
daca insa(aprox.)
se folosete
REAL (vezi
nota)
IO308
sql_mode opiunea REAL_AS_FLOAT,
REAL devine sinonim pentru
(aprox)

FLOAT

CREATE TABLE Persoane (Nume VARCHAR(100), Greutate


FLOAT(5,2))
Exemplu:
InfoAcademy SQL 2015

11

in

Tipuri de date MySQL


1. Numerice (intregi, zecimale, vigula fixa, virgula mobila)
2. Temporale
3. Siruri (de octeti, de caractere)
4. Enumerate

InfoAcademy SQL 2015

12

Tipuri de date temporale


Tip de date
DATE
DATETIME
TIME
YEAR
TIMESTAMP

Valori posibile
1000-01-01 ... 9999-12-31
1000-01-01 00:00:00 ... 9999-12-31 23:59:59
-838:59:59 ... 838:59:59
1901 ... 2155 (pt 4 digiti) 1970 ... 2069 (pt 2 digiti)
1970-01-01 00:00:01 ... 2038-01-09 03:14:07

Caracteristici:
- data calendaristica - tipul de date DATE sub forma AAAA-LLZZ;
- moment in timp (data calendaristica+ora) - tipul de date
DATETIME. Formatul este AAAA-LL-ZZ 00:MM:SS;
- TIMESTAMP - asemanator DATETIME, poate memora automat
timpul curent la INSERT sau UPDATE, folosind atributul
ON_UPDATE_CURRENT_TIMESTAMP.
InfoAcademy SQL 2015

13

Tipuri de date temporale (continuare)


Tip de date

Valori posibile

DATE
DATETIME
TIME
YEAR
TIMESTAMP

1000-01-01 ... 9999-12-31


1000-01-01 00:00:00 ... 9999-12-31 23:59:59
-838:59:59 ... 838:59:59
1901 ... 2155 (pt 4 digiti) 1970 ... 2069 (pt 2 digiti)
1970-01-01 00:00:01 ... 2038-01-09 03:14:07

Caracteristici (continuare):
- interval de timp - tipul de date TIME, care poate fi folosit pentru a
reprezenta atat ora din zi, cat si intervale de timp care pot fi mai mari
de 24h. Formatul este 00:MM:SS sau 000:MM:SS;
- an - tipul YEAR, pe 2 sau pe 4 digiti;
- valorile constante pentru coloane se specifica incadrate in apostroafe,
cu excepia tipului YEAR reprezentat ca intreg. Lunile sau zilele care au
o singura cifra nu este obligatoriu sa aiba 0 in fata. Ex: '2006-4-13

18:23:45', '104:56:89', 1986


- Fiecare dintre tipurile de date temporale dispune de o valoare
InfoAcademy SQL 2015
14
zero" a acelui tip de date introdusa automat in modul non-strict.

Tipuri de date temporale (continuare)


INSERT INTO Date(
D DATE,
TS TIMESTAMP,
T TIME,
Y YEAR)
VALUES('2009-04-05',
1986);

'2006-4-13 18:23:45',

'104:56:59',

Particularitati ale TIMESTAMP (Unix time


- Numara secundele scurse intre 1 Ian 1970 si 19 Ian 2038 ;
- Poate fi folosita optiunea default CURRENT_TIMESTAMP la
INSERT;
- In consecinta NU va permite NULL automat ca la alte tipuri de
date (introduce timestamp-ul curent), ci doar daca specificam
acest lucru explicit;
InfoAcademy SQL 2015
15
- Poate avea ca modificator
ON UPDATE CURRENT_TIMESTAMP

Tipuri de date MySQL


1. Numerice (intregi, zecimale, vigula fixa, virgula mobila)
2. Temporale
3. Siruri (de octeti, de caractere)
4. Enumerate

InfoAcademy SQL 2015

16

Tipuri de siruri
MySQL ofer utilizatorului posibilitatea de a lucra cu doua tipuri de iruri:
- iruri de octei - sunt simple succesiuni de numere. Compararea a
doua astfel de iruri se efectueaz numeric, octet cu octet;
- iruri de caractere - un sir de caractere difer fundamental de unul de
octei prin urmtoarele aspecte:
- un caracter poate fi reprezentat pe unul sau mai muli octei (spre
exemplu, un sir de 3 caractere poate avea chiar 9 sau mai muli octei). Ca
o consecina, compararea a doua iruri de caractere nu mai poate fi fcuta
comparnd octeii componeni unul cate unul, ci trebuie inut cont de
caracterele pe care le reprezint diversele grupuri de octei;
Exemplu: r care in reprezentare UTF8 are 5 octei: (197,162 ; 195, 162 ;
114)
(http://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=
dec&unicodeinhtml=dec )

- un sir de caractere are InfoAcademy


asociate
doua proprieti care nu se regsesc
SQL 2015
17
la irurile de octei: character set si collation. Prima stabilete setul de

Siruri de octeti
Tip de date

Spaiu ocupat

BINARY(N)
VARBINARY(N)

Nr. maxim de
octei
N (N<=255)
N (N<=65535)

N octei
Nr. de octei al valorii + 1 sau 2 pt
lungime
TINYBLOB
Nr. de octei al valorii + 1 octet pt
255
lungime
BLOB
Nr. de octei al valorii + 2 octet pt
65535
lungime
MEDIUMBLOB
Nr. de octei al valorii + 3 octet pt
16,777,215 (16M)
BYNARY
caracteristici:
lungime
- siruri de lungime
fixa (N), specificata in definitia coloanei;
LONGBLOB
Nr. de octei al valorii + 4 octet pt
4,294,967,295 (4G)
- valorile culungime
lungimi mai mici sunt completate automat cu spatii;

- la extragerea unei astfel de valori din tabela, spatiile din final


sunt eliminate,
de aceea, daca valoarea originala se incheia cu
unul sau mai multe spatii, la extragere ea nu le va mai avea.
InfoAcademy SQL 2015

18

Siruri de octeti (continuare)


Tip de date
BINARY(N)
VARBINARY(N)

Spaiu ocupat

Nr. maxim de
octei
N (N<=255)
N (N<=65535)

N octei
Nr. de octei al valorii + 1 sau 2 pt
lungime
TINYBLOB
Nr. de octei al valorii + 1 octet pt
255
lungime
BLOB
Nr. de octei al valorii + 2 octet pt
65535
lungime
MEDIUMBLOB
Nr. de octei al valorii + 3 octet pt
16,777,215 (16M)
lungime
VARBYNARY caracteristici:
LONGBLOB
Nr. de octei al valorii + 4 octet pt
- lungime maxima
(N), specificata in definitia4,294,967,295
coloanei; (4G)
lungime

- valorile sunt memorate in tabela exact cum sunt introduce plus


1-2 octeti;
- creste eficienta utilizarii spatiului pe HDD;
- dispare problema cu spatiile prezenta la datele de tip BYNARY
SQL 2015
19
(spatiile de la final vor fi InfoAcademy
pastrate).

Siruri de octeti (continuare)


Tip de date

Spaiu ocupat

BINARY(N)
VARBINARY(N)

Nr. maxim de
octei
N (N<=255)
N (N<=65535)

N octei
Nr. de octei al valorii + 1 sau 2 pt
lungime
TINYBLOB
Nr. de octei al valorii + 1 octet pt
255
lungime
BLOB
Nr. de octei al valorii + 2 octet pt
65535
lungime
MEDIUMBLOB
Nr. de octei al valorii + 3 octet pt
16,777,215 (16M)
Tipurile de date lungime
BLOB (Binary Large Object) caracteristici:
LONGBLOB
Nr. de octei al valorii + 4 octet pt
4,294,967,295 (4G)
- accepta valori
cu lungime variabila, asemanatoare
cu
lungime

VARBINARY, dar cu valori posibile mult mai mari;


- fiecare valoare va ocupa numarul de octeti corespunzator plus
1-4 octeti pentru mentionarea lungimii.
InfoAcademy SQL 2015

20

iruri de caractere
Character set
Character set reprezinta o lista de caractere posibile, fiecare in
corespondenta cu un cod numeric.
- unele seturi sunt reprezentate pe un singur octet (ASCII);
- altele pe 2 octeti - lungime fixa (UCS2);
- altele ocupa 1-4 octeti lungime variabila (UTF8, UTF16, UTF32).
Set de
caractere

Descriere

ASCII

Folosit in engleza americana; fiecare caracter are 7 biti (codurile


au valori <128)

ISO-8859-2
(latin2)

Caracterele folosite in zona central si est europeana (inclusiv


Romnia)

UCS2

Conine majoritatea caracterelor Unicode, codul fiecrui caracter


Lista completa
poate fi obtinuta cu comanda: SHOW CHARACTER
avnd 2 octei
SET
(CHARSET).Character set pentru Unicode, cu fiecare caracter ocupnd intre
UTF8
InfoAcademy SQL 2015
Lista prezinta1sisi collation-ul
implicit si numarul maxim de octeti21
4 octei

Collation
Collation reprezinta setul de reguli specific utilizat la compararea
caracterelor componente.
- literele mici si mari pot fi considerate sau nu echivalente (case
sensitive/insensitive);
- literele cu accent sau diacritice pot fi sau nu echivalente;
- un character set poate avea unul sau mai multe collation, dar un sir de
caractere poate avea un singur collation;
- doua seturi diferite de caractere nu pot avea acelasi collation;
Denumirea fiecarui collation este de tipul: numecharset_referinta_tip.
Referinta poate fi: general, numele tarii pentru care se aplica, etc.
Tipul poate fi:
- _ci - case-insensitive;
- _cs - case sensitive;
- _bin - binary (comparate exclusive pe baza codului lor, toate fiind
diferite intre ele.
InfoAcademy SQL 2015
Se pot define valori implicite
de charset/collation la nivel de server, 22
BD si

Tipuri de date MySQL pentru siruri de caractere


Tip de date
CHAR(N)
VARCHAR(N)
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT

Numar maxim de
caractere
N (N<=255)
N (N<=65535)
255
65535
16,777,215 (16M)
4,294,967,295 (4G)

Caracteristici:
- similar ca la sirurile de octeti CHAR are lungime fixa completata
cu spatii;
- celelalte au lungime variabila plus octetii pentru lungime;
- un caracter poate ocupa mai multi octeti;
- la definirea unei coloane de tip sir de caractere se specifica
InfoAcademy SQL 2015
23
lungimea, charset-ul si collation;

Tipuri de date MySQL


1. Numerice (intregi, zecimale, vigula fixa, virgula mobila)
2. Temporale
3. Siruri (de octeti, de caractere)
4. Enumerate

InfoAcademy SQL 2015

24

Tipuri de date enumerate


Coloana de acest tip poate lua valori doar dintr-o multime fixa de valori
distincte. MySQL dispune de doua tipuri de astfel de date:
- ENUM
- contine valori dintr-o multime prestabilita, specificata in definitia
coloanei;
- fiecare inregistrare va avea una din valorile din lista, sau NULL, daca
este permis;
- pot fi definite maxim 65535 de valori distincte

CREATE TABLE Prezenta(


ID INT(10),
Perioada ENUM('dimineata', 'pranz', 'seara')
);
INSERT INTO Prezenta VALUES(3, 'pranz')
InfoAcademy SQL 2015

25

Tipuri de date enumerate (continuare)


Atunci cand coloana in cauza permite NULL, valoarea default a
coloanei va fi NULL. In caz contrar, daca nu se specifica explicit
valoarea default la crearea coloanei, in modul non-strict va fi folosit
implicit primul element din lista de valori permise.

Atunci cand pe o coloana de tip ENUM se introduce o valoare


invalida (alta decat cele din lista permisa) si serverul functioneaza
in modul non-strict, valoarea memorata in baza de date va fi ''
(sirul vid) pentru a indica eroarea. Aceastei valori particulare ii
corespunde codul 0

InfoAcademy SQL 2015

26

Tipuri de date enumerate (continuare)


- SET
- asemanator cu ENUM, in plus permite o combinatie de valori;
- pot fi definite maxim 64 de valori distincte;
- valoarea '' (sirul vid) este una valida in cazut acetui tip de date.

CREATE TABLE Prezenta(


ID INT(10),
Perioada SET('dimineata', 'pranz', 'seara')
);
INSERT INTO Prezenta VALUES(4, 'pranz,seara')

InfoAcademy SQL 2015

27

In instructiunile MySQL, valorile de tip ENUM sau SET sunt


reprezentate ca stringuri, incadrate intre apostroafe.
Stocarea lor in baza de date se face insa eficient: fiecare valoare
a unui tip de date enumerat este memorata de catre MySQL sub
forma unui intreg corespunzator.
Valorile sunt numerotate de la 1 (dimineata 1, pranz 2, seara
3).
Valoarea intreaga corespunzatoare conteaza atunci cand
coloanele de tip ENUM/SET intervin in expresii in contexte
numerice.
Exemplu:
InfoAcademy SQL 2015

28