Encyklopedia SQL - Typy danych T-SQL  

Udostępnij na: Facebook

Autor: Paweł Wilkosz

Opublikowano: 2012-01-31

Niniejsza publikacja koncentrować się będzie na typach danych, jakie oferuje T-SQL. Ich znajomość jest niezwykle istotna w kontekście nie tylko codziennej pracy z bazami danych, ale również w procesie projektowania tabel, obiektów, procedur składowanych oraz innych elementów, które operują bezpośrednio na prymitywach i skalarach.

Przed wykonaniem zadań zapoznaj się z następującym materiałem:

Po wykonaniu zadań będziesz wiedział:

  • jakie typy danych dla kolumn oraz skalarnych wartości oferuje język T-SQL.

Typy danych T-SQL

Język T-SQL, mimo iż należy do klasy języków deklaratywnych, podobnie jak inne języki wysokiego poziomu (np. C#), rozpoznaje i klasyfikuje dane na podstawie typów. W poniższych tabelach zostały przedstawione wszystkie typy, wykorzystywane przez SQL Server, wraz z podstawową klasyfikacją.

Typy numeryczne

Do wartości numerycznych zalicza się typy przedstawione w Tabeli 1.

Tabela 1. Typy numeryczne w T-SQL.

Typ Opis
Bigint 8-bajtowy typ numeryczny z zakresem: -2^63 (-9,223,372,036,854,775,808) to 2^63-1 (9,223,372,036,854,775,807).
Numeric Wielkość typu zależy od precyzji. 1-9 – 5 bajtów, 10-19 – 9 bajtów, 20-28 – 13 bajtów, 29-38 – 17 bajtów.
bit Wartości: 0, 1 lub NULL.
smallint 2-bajtowy typ numeryczny z zakresem: -2^15 (-32,768) do 2^15-1 (32,767).
decimal Wielkość typu zależy od precyzji. 1-9 – 5 bajtów, 10-19 – 9 bajtów, 20-28 – 13 bajtów, 29-38 – 17 bajtów.
smallmoney 4-bajtowy typ do zapisu walut z zakresem: - 214,748.3648 do 214,748.3647.
int 4-bajtowy typ numeryczny z zakresem: -2^31 (-2,147,483,648) do 2^31-1 (2,147,483,647).
tinyint 1-bajtowy typ numeryczny z zakresem: 0 – 255.
money 8-bajtowy typ do zapisu walut z zakresem: -922,337,203,685,477.5808 do 922,337,203,685,477.5807.
float Typ zmiennoprzecinkowy z zakresem: - 1.79E+308 to -2.23E-308, 0 and 2.23E-308 to 1.79E+308. Ilość bajtów zależy od precyzji. 1-24 – 4 bajty (7 cyfr), 25-53 – 8 bajtów (15 cyfr).
real 4-bajtowy typ zmiennoprzecinkowy z zakresem: - 3.40E + 38 to -1.18E - 38, 0 and 1.18E - 38 to 3.40E + 38. Typ real jest 24-cyfrowym typem float.

Data i czas

Dane zapisywane jako data i czas powinny zostać zaprezentowane za pomocą typów przedstawionych w Tabeli 2.

Tabela 2. Typy daty i czasu w T-SQL.

Typ Opis
date 10-znakowy typ zapisu daty z precyzją: 10.0. Domyślnym formatem jest: YYYY-MM-DD, natomiast domyślna wartość to 1900-01-01 (używana jako niejawna konwersja time do typu datetime2 albo datetimeoffset).
datetimeoffset 8-bajtowy typ do zapisu daty z zakresu: 1 stycznia 1 roku n.e. do 31 grudnia roku 9999, liczone wg kalendarza gregoriańskiego oraz czas 24-godzinny z dokładnością do 100 ns. Uwzględnia przesunięcie strefy czasowej.
datetime2 8-bajtowy typ do zapisu daty z zakresu: 1 stycznia 1 roku n.e. do 31 grudnia 9999 oraz czas 24-godzinny z dokładnością do 100 ns.
smalldatetime 4-bajtowy typ do zapisu daty z zakresu 1900-01-01 do 2076-06-06 z dokładnością do 1 minuty.
datetime 8-bajtowy typ do zapisu daty z zakresu 1 stycznia 1753 do 31 grudnia 9999 z dokładnością do 0.00333 sekund.
time 3 – 5-bajtowy typ do zapisu czasu z dokładnością do 100 ns. Ilość bajtów zależy od skali precyzji.

Typ znakowy

Do wartości znakowych zalicza się typy przedstawione w Tabeli 3.

Tabela 3. Typy znakowe w T-SQL.

Typ Opis.
char Stało-znakowy typ o wielkości 1 – 8000 bajtów.
text Zmienno-znakowy typ o długości max. 2^30 – 1 bajtów.
varchar Zmienno-znakowy typ o długości 1 – 8000 bajtów.
nchar Stało-znakowy typ Unicode o wielkości 1 – 4000 bajtów.
nvarchar Zmienno-znakowy typ Unicode o wielkości 1 – 4000 bajtów.
ntext Zmienno-znakowy typ Unicode o wielkości max. 2^30 – 1 bajtów.

Typy binarne

Do wartości binarnych zalicza typy przedstawione w Tabeli 4.

Tabela 4. Typy binarne.

Typ Opis.
binary Przechowywany najczęściej jako stały strumień bajtów typ o wielkości 1 – 8000 bajtów.
varbinary Przechowywany najczęściej jako zmienny strumień bajtów typ o wielkości 1 – 8000 bajtów.
image Zmienno-bajtowy typ o długości 0 – 2^31 – 1, przeznaczony do składowania obrazów w bazie danych.

Typy przestrzenne

SQL Server oferuje typy do reprezentowania obiektów geometrycznych i geograficznych (Tabela 5.)

Tabela 5. Typ geography i geometry.

Typ Opis.
geography Typ do przechowywania danych geograficznych, zaimplementowany w .NET CLR. Wykorzystywany jest głównie do zapisu pozycji GPS. Uwzględnia krzywiznę Ziemi.
geometry Typ do przechowywania typów geometrycznych (w szczególności figur), zaimplementowany w .NET CLR.

Pozostałe typy

Pozostałe typy zostały przedstawione w Tabeli 6.

Tabela 6. Pozostałe typy danych.

Typ Opis
cursor Typ danych dla zmiennych parametrów wyjściowych procedury, które zawierają doniesienie do kursora.
hierarchyid Typ o zmiennej długości danych, służący do reprezentowania pozycji danej informacji w hierarchii.
sql_variant Typ danych, przechowujący różne wartości typów obsługiwanych przez SQL Server. Jest odpowiednikiem typu var w języku C#.
table Typ tabelaryczny.
uniqueidentifier Typ umożliwiający automatyczne generowanie unikalnych liczb binarnych w bazie danych.
xml Typ XML-owy.

 

Informacja

Zapamiętaj, że:

  1. SQL Server 2008 oferuje, oprócz typów standardowych, typy do zapisu danych geograficznych oraz figur geometrycznych, często wykorzystywanych w systemach GIS.
  2. Typ real to tak naprawdę float(24).
  3. Do zapisu daty i czasu powinno używać się typów, jakie oferuje SQL Server 2008 R2, czyli: time, datetime2, datetimeoffset. Gwarantuje to efektywniejsze zużycie zasobów dyskowych oraz wyższą dokładność w przeliczaniu daty i czasu.

Podsumowanie

Niniejsza publikacja w sposób szczegółowy opisuje typy danych, z którymi możesz się spotkać podczas pracy z SQL Server. Ich odpowiedni dobór jest niezwykle istotny w procesie projektowania baz danych, jak i również manipulowania na informacjach składowanych w tabelach.

W kolejnej publikacji nauczysz się tworzyć tabele.

Dodatkowo zobacz: