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. |