SQL Server Veri Tipleri

17 Tem by NURULLAH ÇAKIR

SQL Server Veri Tipleri

Veritabanının gereksiz büyümesini engellemek için tabloları tasarlarken SQL Server Veri Tiplerini doğru belirlemek çok kritik bir adımdır. Veri tiplerinin diskte kapladığı alan değişmektedir.

 

Örneğin tablonuzda sayı tiplerinden birini barındıracak bir alan olsun. Eğer bu alanın değeri 32768’i hiçbir zaman geçmeyecekse smallint olarak tanımlayabilirsiniz. Çünkü smallint’in maksimum değeri 32768’dir. Ve diskte 2 byte yer kaplar. Aynı alanı integer olarak da tanımlarsanız uygulamanız çalışacaktır ama integer tipi diskte 4 byte alan kaplayacağı için veritabanınız gereksiz büyüyecektir.

 

Önemli bir örnek daha verip bütün veri tiplerinin detaylarını veren tabloyu paylaşacağım.

Örneğin bir karakter alanını tablonuzda saklamak istiyorsunuz. Fakat bu kolona gelen değerlerin uzunluğu 1 ile 100 arasında değişecek. Böyle bir kolona veri tipi atamak için CHAR(100)’ü de kullanabilirsiniz VARCHAR(100)’ü de.

 

İki veri tipi içinde uygulamanız çalışacaktır. Fakat CHAR kullanırsanız her kolon için diskte kapladığı alan

Veri Tipi

Değer Aralığı

Veritabanında Kapladığı Alan

bigint

Minimum:   -2^63 (-9,223,372,036,854,775,808)

Maksimum:  2^63-1 (9,223,372,036,854,775,807)

8 Byte

int

Minimum:   -2^31 (-2,147,483,648)

Maksimum:  2^31-1 (2,147,483,647)

4 Byte

smallint

Minimum:   -2^15 (-32,768)

Maksimum:  2^15-1 (32,767)

2 Byte

tinyint

Minimum:        0

Maksimum:  255

1 Byte

bit

0 ya da 1 değerini alır. Genellikle kız ya da erkek tarzında gereksinimlerde kullanılır.

 

Eğer tabloda 8 ya da daha az

bit kolonu varsa 1 byte, 

8’den fazla varsa 2 byte yer kaplar.

decimal/ numaric

Minimum:   – 10^38 +1

Maksimum:   10^38 – 1.

 

 

Hassasiyetine göre diskte kapladığı alan değişir.

 

1’den 9 ‘a kadar Hassasiyet için:       5 byte

10’dan 19’a kadar Hassasiyet için:    9 byte

20’den 28’a kadar Hassasiyet için:  13 byte

29’dan 38’e kadar Hassasiyet için:  17 byte

money

Minimum:   -922,337,203,685,477.5808 Maksimum:  922,337,203,685,477.5807

8 Byte

smallmoney

Minimum:   – 214,748.3648

Maksimum:   214,748.3647

4 Byte

float

-1.79308 ile –2.23308, 0

 2.23308 ile    1.79308

 7 basamağa kadar 4 Byte

15 basamağa kadar 8 Byte

Real

-3.438  ile -1.1838, 0

 1.1838 ile 3.438

4 Byte

date

Minimum:     0001-01-01

Maksimum:   9999-12-31

3 Byte

smalldate

Minimum:     1900-01-01

Maksimum:  2079-06-06

4 Byte

datetime

Minimum:     1753-01-01 00:00:00.000

Maksimum:  9999-12-31 23:59:59.997

8 Byte

datetime2

Minimum:     0001-01-01 00:00:00.0000000

Maksimum:  9999-12-31 23:59:59.9999999

 

1-2 Hassasiyet İçin = 6 Byte

3-4 Hassasiyet İçin = 7 Byte

5-7 Hassasiyet İçin = 8 Byte

datetimeoffset

Minimum:     0001-01-01 00:00:00.0000000 

Maksimum:   9999-12-31 23:59:59.9999999 

Time zone offset Aralığı: -14:00 / +14:00

1-2 Hassasiyet İçin = 8 Byte

3-4 Hassasiyet İçin = 9 Byte

5-7 Hassasiyet İçin = 10 Byte

time

Minimum:     00:00:00.0000000

Maksimum:   23:59:59.9999999

 

5 Byte(Default olarak kullanılırsa)

char

0 ile 8000 arasında

Tanımlandığı değer kadar Byte.

Char(10) -> 10 Byte

varchar

0 ile 8000 arasında

Tanımlandığı değer + 2 Byte

varchar(MAX)

0 ile 2 147 483 647 arasında

Maksimum değeri:   2^31-1 (2,147,483,647) Byte

text

0 ile 2,147,483,647 arasında

Maksimum değeri:   2^31-1 (2,147,483,647) Byte

ntext

0 ile 1,073,741,823 arasında

Maksimum değeri:  2^30-1 (1,073,741,823) Byte

image

 

Maksimum değeri:  2^31-1 (2,147,483,647) Byte

binary

0 ile 8000 arasında

Tanımlandığı değer kadar Byte.

Binary(10) -> 10 Byte

varbinary

0 ile 8000 arasında

Tanımlandığı değer + 2 Byte

varbinary(MAX)

0 ile 2 147 483 647 arasında

Tanımlandığı değer + 2 Byte

Maksimum değeri:  2^31-1 (2,147,483,647) Byte

sql_variant

 

Bazı veri tiplerinin değerlerini saklamak için kullanılır.

Aşağıdakiler hariç:

varchar(max),varbinary(max),nvarchar(max),xml,text,

ntext,image,rowversion(timestamp),sql_variant,

geography,hierarchyid,geometry,User-defined types, datetimeoffset

cursor

 

SQL Server Cursor’da kullanılması için.

Cursor ile ilgili “Cursor Kullanımı” isimli makalemi okumak isteyebilirsiniz.

timestamp/

rowversion

 

Veritabanındaki bir tabloda bir insert yada

modifikasyon yapıldığında otomatik artan

bir counter vardır.

 

Bu counter veritabanının rowversion’ıdır.

Bir tabloda bir tane kolon rowversion olarak

tanımlanabilir.

 

Timestamp’te rowversion’ın aynısıdır ve

sonraki sürümlerde kullanılmayacaktır.

Xml

 

Xml veriler için kullanılır.

Table

 

Sonradan kullanım amacıyla bir sonuç

kümesini saklamak için kullanılır.

uniqueidentifier

 

GUID(global olarak tekilliği garanti eder) veriyi tutar.

 

select NEWID() script’ini çalıştırdığınızda aşağıdaki

gibi bir GUID veri oluşturur.

 

A4C5DB26-7F18-4B4F-A898-E7DE26A8446A

 

Bazen veritabanlarında tekilliği sağlamak için kullanılır.

Ama bu amaçla kullanıldığında genelde performansı düşürür.

hierarchyid

 

Hiyerarşik yapılarda, hiyerarşideki pozisyonları

temsil etmek için kullanılır.

geography

 

Dünyadaki koordinat sistemini tutar.

Dünyanın eğimlerini de hesaba katarak.

geometry

 

Euclidean (flat) sistemi ile  koordinat sistemini tutar.

Sadece 2 düzlem üzerinden hesaplanır.

Dünyanın eğimlerini hesaba katmaz.

Loading

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir