PHP i bazy danych


MySQL. Typy danych i ich zakresy

Aby móc samodzielnie tworzyć tabele, należy znać typy i zakresy danych, które będą przechowywane w poszczególnych kolumnach. Poniżej przedstawiono tabelę i wyjaśniono pewne rzeczy, które bywają istotne podczas projektowania tabeli w MySQL (różnice pomiędzy typami CHAR i VARCHAR oraz funkcja NOW() - obecny czas i data)...

Poniższa tabela prezentuje najpopularniejsze typy danych stosowane w MySQL:

Typ Rozmiar Opis i zakres
CHAR(dł.) Określony w nawiasie (bajty) Pole tekstowe o stałej długości znaków, może przechowywać od 0 do 255 znaków.
VARCHAR(dł.) Długość łańcucha +1 bajt Pole tekstowe o zmiennej długości, od 0 do 255znaków.
TINYTEXT Długość łańcucha +1 bajt Łańcuch od 0 do 255 znaków.
TEXT Długość łańcucha +2 bajty Tekst o maksymalnej długości 65 535 znaków.
MEDIUMTEXT Długość łancucha +3 bajty Tekst o maksymalnej długości 16 777 215 znaków
LONGTEXT Długość łańcucha +4 bajty Tekst o maksymalnej długości 4 294 967 295 znaków
TINYINT(dł.) 1 bajt Liczby typu całkowitego (ang. integer). Zakres wynosi od -128 do 127 lub w przypadku unsigned od 0 do 255.
SMALLINT(dł.) 2 bajty Typ całkowity, liczby od -32 768 do 32 767 lub dodatnie od 0 do 65 535.
MEDIUMINT(dł.) 3 bajty Typ całkowity, liczby od -8 388 608 do 8 388 607, dodatnie od 0 do 16 777 215.
INT(dł.) 4 bajty Typ całkowity, liczby od -2 147 483 648 do 2 147 483 647, dodatnie od 0 do 4 294 967 295
BIGINT(dł.) 8 bajtów Zakres od -9 223 372 036 854 775 808 do 9 223 372 036 854 775 807, dodatnie 0 do 18 446 744 073 709 551 615
FLOAT 4 bajty Mała liczba rzeczywisty, zmiennoprzecinkowa
DOUBLE(dług , miejsc) 8 bajtów Duża liczba rzeczywista, zmiennoprzecinkowa
DECIMAL(dług, miejsca) Długość +1 lub +2 bajty Liczba typu DOUBLE przechowywana jako łańcuch (możliwość określenia stałej liczby miejsc po przecinku)
DATE 3 bajty Data: RRRR-MM-DD
DATETIME 8 bajtów Data: RRRR-MM-DD HH:MM:SS
TIMESTAMP 4 bajty Data: RRRRMMDDHHMMSS, zakres kończy się w roku 2037 (epoka Uniksa)
TIME 3 bajty Czas: HH:MM:SS
ENUM 1 lub 2 bajty Wyliczanie. Każdy rekord ENUM musi być unikatowy w danej kolumnie...
SET 1, 2, 3, 4 lub 8 bajtów Podobnie jak ENUM, ale bez dodatkowej rejstrykcji.

Przykład utworzenia tabeli:

CREATE TABLE linki (
    link_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
    tytul VARCHAR(50) NOT NULL,
    krotki_opis VARCHAR(250) NOT NULL,
    dlugi_opis TEXT NOT NULL,
    email_autora VARCHAR(50),
    haslo CHAR(16) NOT NULL,
    data_dodania DATETIME NOT NULL,
    data_edycji DATETIME,
  PRIMARY KEY( link_id)
);

Typy CHAR i VARCHAR

Oba typy określają tekst (ciąg znaków) o długości określonej w nawiasie. Maksymalna długość ciągu wynosi 255 znaków (łącznie ze spacjami) - jeżeli zostanie podany większy łańcuch, tekst zostanie obcięty.

Jest jednak istotna różnica pomiędzy tymi dwoma typami. Otóż posługując się typem CHAR trzeba mieć na uwadze, że kolumna będzie przechowywała dokładnie taką ilość znaków, jaka została określona w nawiasie - nawet jeśli zostanie podany ciąg krótszy (pozostałe miejsca zostaną zastąpione spacjami). W przypadku typu VARCHAR przechowywana jest długość podanego łańcucha + 1 bajt.

Dodatkowo przy odczytywaniu danych z kolumny typu CHAR niepotrzebne spacje są obcinane, natomiast w przypadku typu VARCHAR zbędne spacje są obcinane przy wstawianiu danych do kolumny.

Typ CHAR powinien być stosowany do przechowywania danych o stałej szerokości, mogą to być hasła (ciąg znaków + spacje na końcu), kody pocztowe, numery kont bankowych (26 cyfr) czy inne podobne. Typ VARCHAR powinien być stosowany tam, gdzie przechowywane dane mogą być dowolnej długości do 255 znaków - czyli odwrotnie do typu CHAR.

Należy też pamiętać, że typ VARCHAR będzie charakteryzował się mniejszym rozmiarem na dysku niż typ CHAR.

Data i czas chwili obecnej - NOW()

Jeżeli zaistnieje potrzeba wstawienia czasu i/lub daty chwili obecnej, można posłużyć się funkcją NOW(). Jest to jedna ze standardowych funkcji MySQL.

Format daty i czasu określamy typem danych kolumny - w zależności jaki format daty wybierzemy (patrz tabela), taki będzie zapisany za pomocą funkcji NOW() (więc nie musimy dbać o ustawienie dodatkowych parametrów tej funkcji).

Obecny czas i data mogą okazać się bardzo przydatne w wielu projektach dynamicznych stron WWW. Przykładem zastosowania mogą być daty:

  • wstawienia i modyfikacji artykułów,
  • wstawienia i modyfikacji news,
  • dodania komentarza,
  • ostatniej modyfikacji strony,
  • rejestracji użytkowników i wiele innych...

A oto przykład zapisania obecnej daty i czasu:

INSERT INTO nazwa_tabeli ( data_dodania ) VALUES ( NOW() );

Zauważ, że funkcja NOW() nie została objęta apostrofami.

Można także użyć polecenia UPDATE, np. do zaznaczenia daty modyfikacji.

UPDATE nazwa_tabeli SET ostatnia_zmiana=NOW();

Dodał: Paweł​Dzedzej
Dział: PHP i bazy danych


 

ComputerSun.pl na FaceBooku
Polecamy lekturę:

Word 2007 PL. Pierwsza pomoc



X

Zapisz się na biuletyn serwisu ComputerSun.pl, aby otrzymać poradnik:

Zabezpieczanie sieci bezprzewodowych. Przydatne wskazówki jak chronić sieć domową przed intruzami

Imię:  
Email:
Tak, akceptuję Politykę Prywatności