Veritabanı içerisinde tablolar tasarlanırken, saklanacak her veri alanı için ihtiyacı karşılayan en uygun veri tipinin belirlenmesi gerekir. Özellikle çok fazla verinin tutulduğu veritabanlarında performans kaybını azaltmak, veritabanı ve yedeklerin kapladığı disk alanını en aza indirmek için veri tipleri dikkatle seçilmelidir.
1-Karakter Tabanlı (Metinsel) Veri Tipleri
char: Unicode olmayan sabit uzunlukta karakter verisi saklamak için kullanılır. Boyutu değişken olmakla birlikte en fazla 8000 karakter veri saklayabilir.
varchar: Unicode olmayan değişken uzunlukta karakter verisi saklamak için kullanılır. Belirlenmiş veri kapasitesi 8000 karakter olmasına rağmen (max) parametresi ile bu değer 2^31 byte’ a kadar genişletilebilir.
text: Daha önceki sql versiyonlarını desteklemek amacıyla Sql Server 2012 içerisinde hala yer almaktadır. Bu veri tipi yerine varchar(max) kullanın.
nchar: Sabit uzunlukta 4000 karakter unicode karakter verisi saklamak için kullanılır. Boyutu değişken olmakla birlikte kısa olan değerler atanan uzunluğa tamamlanır.
nvarchar: Değişken uzunlukta unicode karakter verisi saklamak için kullanılır. Belirlenmiş maksimum uzunluk 4000 karakter olmasına rağmen (max) parametresiyle 2^31 byte’a kadar veri depolanabilir.
ntext: text veri tipi gibi, bu veri tipide sadece eski versiyonları desteklemek amacıyla mevcuttur. Text tipinden tek farkı unicode veri saklayabilir.
Metinsel Veri Tipleri Arasından Seçim Yapmak
1-Sabit uzunluk veya değişken uzunluk veri tiplerine karar vermek: Bir sütuna girilecek verilerin tamamı benzer uzunlukta ise (telefon numarası, tc kimlik no, telefon kodu v.b) char, nchar gibi sabit uzunluktaki veri tipleri kullanılmalıdır. Fakat girilecek verinin uzunluğu önceden belli değilse (isim, soyisim, adres v.b) değişken uzunlukta olan varchar, nvarchar veri tipleri tercih edilmelidir.
2- Unicode olan ve olmayan veri tiplerine karar vermek: char ve varchar veri tipleri Unicode değildir, yani sadece ASCII tabloda yer alan karakterleri saklayabilirsiniz. Eğer Türkçe karakterli veriler girecekseniz ve Collation ayarları hakkında da bilgi sahibi değilseniz sorun yaşamamak için nchar ve nvarchar veri tiplerini kullanınız.
2-Nümerik (Sayısal) Veri Tipleri
bit: Bir byte uzunluğunda tamsayı veri tipidir. Boyutu aklınızı karıştırmasın. Tablodaki ilk bit, bir byte büyüklüğünde yer kaplar, sonraki yedi bit aynı byte’ı kullanabilir.
tinyint: 1 byte büyüklüğünde 0 ile 255 arasında değer alabilen tamsayı veri tipidir.
smallint: 2 byte büyüklüğünde -32768 ile 32767 arasında değer alabilen tamsayı veri tipidir.
int: 4 byte büyüklüğünde yaklaşık -2 milyar ile +2 milyar arasında değer alabilen tamsayı veri tipidir.
bigint: 8 byte yüyüklüğünde -2^63 ile +2^63 arasında değer alabilen tamsayı veri tipidir.
decimal ve numeric: Decimal ve nümeric veri tipleri adları farklı olmasına rağmen kullanımları aynıdır. Boyutu değişken olmakla birlikte -10^38 ile +10^38 arasında ondalık ve tamsayı türünde verileri saklayabilir.
float: Boyutu ve doğruluğu (ondalık kısım duyarlılığı) aldığı parametreye göre değişen kayan noktalı sayılar için kullanılır.
real: Float veri tipinin parametre olarak 24 değerini aldığında ortaya çıkan halidir. -3.40E+38 ile 3.40E+38 arasında değer alır.
3-Parasal Veri Tipleri
smallmoney: 4 byte uzunluğunda yaklaşık -214 000 ile 214 000 arasında parasal değerleri tutmak için kullanılır. Ondalık kısım duyarlılığı 4 basamaktır.
money: 8 byte uzunluğunda yaklaşık -922 milyar ile 922 milyar arasındaki parasal değerleri tutmak için kullanılır. Ondalık kısım duyarlılığı 4 basamaktır.
4-Tarih-Zaman Veri Tipleri
date: Tarihleri YYYY-MM-DD şeklinde saklayan 3 byte uzunluğunda veri tipidir. 0001-01-01 ile 9999-12-31 tarihleri arasındaki tüm değerleri tutabilir.
smalldatetime: Tarih ve zaman verilerini YYYY-MM-DD hh:mm:ss şeklinde saklayan 4 byte uzunluğunda veri tipidir. 1900-01-01 00:00:00 ile 2079-06-06 23:59:59 arasındaki tarih ve zaman değerlerini saklar.
datetime: YYYY-MM-DD hh:mm:ss:mmm şeklinde tarih ve zaman verilerini tutan 8 byte uzunluğunda veri tipidir. 1753-01-01 00:00:00.000 ile 9999-12-31 23:59:59.999 arası değerlerini saklar.
datetime2: datetime ile arasındaki fark salise hassasiyetinin daha yüksek olmasıdır. 7 basamağa kadar salise hassasiyeti kullanıcı tarafından belirlenebilir. Kapladığı alan salise hassasiyetine göre değişir. (6-8 byte)
time: Sadece saat verilerini hh:mm:ss:nnnnnnn şeklinde saklayan veri tipidir. Dateteime2 gibi salise hassasiyeti maksimum 7 basamaktır ve kullanıcı tarafından değiştirilebilir. (3-5 byte)
datetimeoffset: Ülkelere göre değişen zaman farkını tutmak için kullanılır.
5-Binary (İkilik) Veri Tipleri
binary: Maksimum 8000 byte boyutunda, sabit uzunlukta binary veri saklamak için kullanılır.
varbinary: Değişken uzunlukta 8000 byte boyutunda binary değer saklamak için kullanılır. (max) parametresiyle tutacağı maksimum değer 2^31 byte’a kadar yükseltilebilir.
image: Önceki sql versiyonlarını desteklemek amacıyla kullanılmaktadır. Bu tip yerine varbinary (max) veri tipi tercih edilmelidir.
6-Diğer Veri Tipleri
timestamp ve rowversion: Tabloya kayıt eklendiğinde ve güncellendiğinde binary türünde özel bir değer alan veri tipidir. Tarih veri tipleriyle alakası yoktur. Kullanıcı bu alanı değiştiremez veya kendisi değer atayamaz.
uniqueidentifier: 16 byte uzunluğunda eşsiz bir GUID değeri saklamak için kullanılır. Guid ve yapısı hakkında internetten bilgi bulabilirsiniz.
xml: XML türünde hiyerarşik verileri saklamak için kullanılır. Bellekteki boyutu saklanan xml verisine göre değişir.
geography: Coğrafi koordinatları ve gps verilerini tutmak için kullanılır.
geometry: Öklid koordinat sistemine ait verileri tutmak için kullanılır. Geometrik şekillerin en, boy, yükseklik verilerini saklar.
hierarchyid: Ağaç veri modeli veya hiyerarşik olarak sınıflandırılmış verileri saklamak için kullanılır.
Sql Server içerisinde kullanabileceğimiz veri tiplerini açıkladık, en uygun veri tipini seçmek tabloyu tasarlayan kişinin bilgi ve deneyimine kalmıştır. Veri tipi seçimiyle ilgili tüm sorularınızı bana yazabilirsiniz.