W kursie tym chciałbym przybliżyć wszystkim pojęcie typu danych oraz wymienić typy danych, jakie występują w nowym Microsoft SQL Server 2005. Szczególną uwagę zwrócimy na nowości jakie zostały wprowadzone w najnowszej wersji serwera.
Typy danych charakteryzują daną komórkę w wierszu. Mówią, jakiego rodzaju informacje możemy umieścić w danej kolumnie. Przykładowo innego typu danych użyjemy, gdy będziemy chcieli przechowywać imię użytkownika, innego dla daty jego urodzin, a jeszcze innego, gdy będziemy chcieli przechowywać jego zdjęcie.
Poszczególne typy danych można zakwalifikować do różnych grup. Ponieważ dokładny opis i wynikający z tego podział znacznie wykracza poza ramy tego artykułu, zastosujemy tu dość ogólną segmentację ze względu na funkcjonalność. Poniżej przedstawiony jest podział na grupy funkcjonalności:
|
Dane tekstowe |
char, varchar, nchar, ntext, nvarchar |
|
Liczbowe |
int, smallint, bigint, tinyint, float, real, decimal, numeric |
|
Data i czas |
datetime, smalldatetime |
|
Binarne |
binary, varbinary |
|
Waluta |
money, smallmoney |
|
Specjalne |
text, image, xml, bit |
Typy tekstowe
Typy tekstowe składają się z dwóch podtypów. Pierwszy to typ łańcuchowy: char, varchar, drugi zaś, unicode: ntest, nvarchar. Łańcuchy znaków mogą zawierać litery, liczby i symbole. W zależności od zadeklarowanej długości(np.: char(16)) mamy możliwość przechowywania określonej ilośći znaków. Jeśli pole zadeklarowane na 16 znaków nie zostanie całkowicie wypełnione (wpisany tekst ma mniej niż 16 znaków) reszta znaków zostanie uzupełniona spacjami. Jeśli zaś ma więcej niż zadeklarowana liczba, wyraz zostanie obcięty na granicy szesnastego znaku. Zaleca się stosowanie typów o zmiennej ilość (varchar(n)), w przeciwieństwie do poprzednich nie są one dopełniane spacjami, co w dość jasny sposób przyczynia się do efektywniejszego zarządzania zasobami pamięci serwera. Kolejne typy danych, które służą do zapisywania tekstów mają zupełnie inną strukturę fizyczną aniżeli char. Typ nchar, bo o nim tutaj mowa, jest zapisany w standardzie unicode. Standard ten gwarantuje nam skuteczną pracę z serwerem obsługującym aplikacje wielojęzyczne. Jeśli chcielibyśmy aby nasza aplikacja działała zarówno w języku włoskim, polskim jak i w angielskim, pola zawierające tekst muszą być zadeklarowane jako nchar, w przeciwnym wypadku dojdzie do przekłamań. Kosztem wprowadzenia typu nchar, jest zwiększenie fizycznej objętości. Standard unicode zapisuje pojedynczy znak na dwóch bajtach podczas gdy ANSI używa do tego jednego bajtu. Tak więc powinniśmy dokładnie przemyśleć, czy nasza aplikacja ma działać w środowisku wielojęzycznym lub czy w niedalekiej przyszłości jest prawdopodobne, aby w takim otoczeniu działała.
Dodatkowym, dość ważnym ograniczeniem jest maksymalna ilość znaków, które mogą być składowane w jednym polu. Jego objętość nie jest nieograniczona. Jeśli chcemy przechowywać tekst o dużej długości, lepiej użyć typu ntext, do którego możemy wstawiać nawet tekst o wielkości 2 GB!
Typy liczbowe
Typy całkowite
Typy liczbowe dzielimy na całkowite, przybliżone i dokładne. Jeśli w projekcie mamy możliwość wyboru pomiędzy typem całkowitym, a pozostałymi, powinniśmy zawsze użyć całkowitego. Dzięki temu zwiększymy wydajność i efektywność pracy naszego serwera. Typy całkowite różnią się tylko wielkością zajętej powierzchni i ilością bajtów, na których są składowane, a co za tym idzie zakresem liczb jaki można w nich umieszczać. Poniższa tabele przedstawia typy danych całkowitych i towarzyszące im zakresy.