Reguły programisty

SQL Server

Typy danych w SQL Server

Zwięzła specyfikacja typów danych w SQL Server

SQL Serverjob interview70-761

Typy danych w SQL Server można podzielić na następujące kategorie:

a) Numeryczne ze stała dokładnością - przechowują dane z dokładnością do liczby całkowitej lub miejsca dziesiętnego. Zaliczają się do nich:

  - liczby całkowite (podzielone ze względu na zajmowaną wielkość miejsca na dysku i tym samym maksymalną i minimalną wielkość liczby ):

    * tinyint - przechowywany na 1 bajcie, może przyjmować wartości od 0 do 255,

    * smallint - przechowywany na 2 bajtach, może przyjmować wartości od -32768 do 32768,

    * int - przechowywany na 4 bajtach, może przyjmować wartości od -231 do 231-1,

    * bigint - przechowywany na 8 bajtach, może przyjmować wartości od -263 do 263-1.

  - liczby z ułamkiem dziesiętnym ze stałą dokładnością (można elastycznie określać zajmowane miejsce na dysku oraz liczbę miejsc dziesiętnych w ramach części całkowitej jak i ułamkowej):

    * decimal - może być przechowywana na obszarze od 5 do 17 bajtów, może przechowywać maksymalnie liczby w zakresie od -1038 do 1038 + 1,

    * numeric - nie ma funkcjonalnej różnicy pomiędzy numeric i decimal. Ten typ danych istnieje ze względu na konieczność zachowania zgodności wstecznej z wcześniejszymi wersjami SQL Server

  - liczby do przechowywania wartości walut z dokładnością do 4 miejsc po przecinku:

    * money - zajmuje 8 bajtów, może przyjmować wartości od -263 do 263-1,

    * smallmoney - przechowywany na 4 bajtach, może przyjmować wartości od -231 do 231-1.

  - liczby boolowskie - do przechowywania wartości true lub false;

    * bit - zapisywany na 1 bicie. Wartość 1 odpowiada true, 0 odpowiada false.

b) Numeryczne ze zmienną dokładnością (dane są przechowywane za pomocą tzw. notacji naukowej w formacie x = M * 10E, patrz Wikiedia, co powoduje że reprezentacja liczby jest przybliżona):

    * float - przyjmuje opcjonalny parametr, określający liczbę bitów do przechowywania tzw. mantysy liczby (M - w powyższym wzorze). Wielkość mantysy determinuje wielkość zajmowanego miejsca na dysku. Jeśli mantysa znajduje się w zakresie 1 do 24, float wymaga 4 bajty. Jeśli mantysa jest w zakresie od 25 do 53, float wymaga 8 bajtów.

    * real - odpowiada typowi danych float z mantysą o wartości 24 (float(24)).

c) Binarne - służą do przechowywania danych binarnych, takich jak serializowane pliki, obrazy, strumienie danych. Można wybrać typy binarne ze stałą lub zmienną długością.

    * binary - przechowuje dane binarne o stałej długości do 8000 bajtów,

    * varbinary - przechowuje dane binarne o zmiennej długości do 8000 bajtów,

    * image - przechowuje dane binarne o zmiennej długości do 231-1 bajtów

d) Znakowe typy danych - oprócz różnych zakresów przechowywania umożliwiają obsługę wielu języków, sposobów sortowania i rodzajów collation.

    * char - łańcuch znaków o stałej długości - maksymalnie 8000 znaków,

    * varchar - łańcuch znaków o zmiennej długości - maksymalnie 8000 znaków,

    * nchar - łańcuch znaków Unicode o stałej długości - maksymalnie 8000 znaków,

    * nvarchar - łańcuch znaków Unicode o zmiennej długości - maksymalnie 8000 znaków,

    * text - jest niezalecany i wycofywany, został zastąpiony przez varchar(max),

    * ntext - jest niezalecany i wycofywany, został zastąpiony przez nvarchar(max),

e) Typy danych daty i czasu:

    * date - zajmuje 3 bajty, przechowuje tylko datę w zakresie od 0001-01-01 do 9999-12-31.

    * datetime - zajmuje 8 bajtów, przechowuje datę razem czasem 24-godzinnym w zakresie od 1753-01-01 do 9999-12-31.

    * datetime2 - zajmuje zmienną liczbę bajtów: od 6 do 8 bajtów, przechowuje datę razem czasem 24-godzinnym w zakresie od 0001-01-01 do 9999-12-31, można określić precyzję do 100 ns.

    * datetimeoffset - zajmuje stałą długość 10 bajtów z domyślną dokładnością 100ns , przechowuje datę razem czasem 24-godzinnym, pozwala na zapis daty i czasu z uwzględnieniem strefy czasowej np. 2018-08-20 22:12:15 +01:00.

    * smalldatetime - zajmuje stałą długość 4 bajtów, zawiera czas w formacie 24 godzinnym z dokładnością do 1 minuty , zakres dat od 1900-01-01 do 2079-06-06

    * time - zajmuje stałą długość 4 bajtów, przechowuje sam czas w trybie 24 godzinnym, można określić precyzję milisekund w zakresie od 0 do 7 pozycji dziesiętnych.

f) Inne typy danych:

    * xml - służy do przechowywania danych w formacie XML o wielkości do 2GB,

    * uniqueidentifier - przechowuje tzw. identyfikatory unikalne globalne (GUID) na 16 bajtach.

    * hierarchyid - reprezentuje związek hierarchiczny pomiędzy danymi w obrębie tabeli. Wewnętrznie przechowywana jest jako varbinary o długości do 900 bajtów.

    * rowversion - przechowuje automatycznie generowane 8 bajtowe wartości binarne, które są inkrementowane za każdym razem kiedy wiersz jest aktualizowany lub wstawiony.

    * geometry - wykorzystywany jest do przechowywania danych w dwuwymiarowym układzie współrzędnych

    * geography - przechowuje dane w geograficznym układzie współrzędnych.

    * sql_variant - jest specjalnym typem danych przeznaczonym do przechowywania innych wbudowanych typów danych. Pozwala np. na jednoczesne przechowywanie w jednej kolumnie typów integer, decimal i float.

    * cursor - służy do odwołań do obiektów typu cursor, pozwalających na przeglądanie tabel "wiersz za wierszem"

    * table - typ danych umożliwiający przechowywanie tzw. zmiennych tabelowych - używanych do przechowywania tymczasowych wyników zapytań.
Tutorial statistics