Konumuz olan SQL server veri tipleri, yalnızca tablolar sütunlarında değil, değişkenler ve parametreler gibi diğer veritabanı nesneleri için de zorunludur.
Tarih ve Saat Tipleri
Tarih ve tipleri kadar, veri saklarken tartışmaya yatkın çok az veri tipi vardır. Uygulamaların bazıları sadece tarih verisi ile yetinirken, diğer bazı uygulamalar, zaman verisini saklamaya odaklanır. Elbette pek çok uygulama her ikisini saklamaktadır.
SQL Server Tarih ve Saat tipi olan datetime ve smalldatetime ise, her ikisi veriyi de içinde barındırmaktadır.
SQL Server'da zaman bilgisini tutan iki tip mevcuttur: datetime ve smalldatetime.
datetime, 8 byte'lık bir alan kapsamaktadır.1 Ocak 1753'den 31 Aralık 9999'a kadar olan
tarih verilerini 3.33 milisaniyelik bir sapma ile saklayabilirsiniz.
smalldatetime ise, 4 byte'lık bir alan kapsamaktadır. 1 Ocak 1900'den, 6 Haziran
2079 'a kadar olan verileri, 1 dakikalık sapma ile saklayabilirsiniz.
Karakter Veri Tipleri
SQL Server karakter tipleri, seçeceğinize karakter kodlamasına göre her bir karakter için 1(Bir) ya da 2(iki) bytelık alan kullanacaktır. Bu, ANSI ya da Unicode karakter kodlamalarından birini seçmenizebağlı olarak değişecektir.
ANSI ve Unicode
Uzmanlar, çeşitli dillerdeki karakterleri, bir standart formatta saklamak ve ifade edebilmek için ANSI standartlarını geliştirdiler. Bu standartta her bir karakter, 8 bitlik bir işaretleme ile kodlanıyordu. Fakat sorun şuydu ki, bu 8 bitlik kapasite, tüm karakterleri saklamak için yeterli değildi.
Bu problemi aşmak için uluslararası bir karakter kodlama standardı olan Unicode tasarlandı. Unicode, ANSI'nın aksine, her bir karakter için 2 bytelık bir alan kullanmaktadır
SQL Server' da, bu iki format ile kodlanan verileri saklamak için karakter tipleri içinde iki varyasyon sunmaktadır. SQL Server'da Unicode veriler için kullanılacak veri tipleri, veri tipi adının önüne eklenenbir "n" harfiyle imlenmektedir. (Örneğin, nchar).
SQL Server'da karakter tipi tanımlanırken, tip kapasitesi de belirtilmektedir.
Örneğin, char(10) şeklinde bir tanımlama yaptığımızda, veri tipimiz maximum 10 karakterlik veri içerebilecektir. Fakat tanımlamamızı, nvarchar(10) olarak yaptığımızda, veri tipimiz, 5 karakterlik bir veri içereccektir. Bunun sebebi ise, Unicode karakter kodlamasında her bir
karakteri 2 byte ile saklanmasıdır.
SQL Server Sabit Genişlikli Karakter Tipleri
char(n) : Maximum 8.000 byte yani 8.000 karakterlik veri saklayabilir. ANSI tipinde
veriler içerebilir. Sabit genişliktedir.
nchar(n) : 8.000 byte'lık veri saklayabilir. char tipinden farklı olarak, nchar tipi Unicode tipinde veri içereceği ve Unicode formatında her bir karakter 2 bytelık bir alanda saklandığı için bu tipin kapasitesi 4.000 karakter olacaktır.
SQL Server Değişken Genişlikteki Veri Tipleri
varchar(n) - 8.000 bytelık veri içerebilir. Maximum 8.000 karakterlik veri saklar.Genişliği içerdiği veriye bağlı olarak değişmektedir. ANSI kodundaki verileri saklar.
varchar(max) 2 GB'e kadar veri ve 1.073.741.824 'e kadar karakter saklayabilir. Genişliği, içerdiği veriye göre değişkenlik gösterir. ANSI tipindeki karakter verilerini saklar.
nvarchar(n) : Tip isminin önündeki "n" harfinden de anlaşılacağı üzere, Unicode veri tiplerini saklar. 8.000 bytelık kapasitesi vardır. Maksimum 4.000 karakter içerebilir.
nvarchar(max) 2 GB'e kadar veri ve 536.870.912 adet karakter saklayabilir.Genişliği, içerdiği verilere göre değişebilir.
text : 2 GB ' e kadar veri saklayabilir. ANSI türünde verileri ihtiva eder.
ntext : 2 GB 'e kadar veri ve 536.870.912 adet karakter saklayabilir. Unicode türünde veri ihtiva eder.
text-ntext ve varchar(max)-nvarchar(max) ikililerinin kapasite olarak birbirlerinin
aynı olduğu dikkatinizi çekmiştir. text ve ntext veri tipleri ile, yüksek kapasiteli metinsel verileri saklayabilirsiniz fakat, ntext ve text veri tiplerini, join, where ve sistem fonksiyonları gibi pek çok operasyonda kullanamazsınız.
Binary (İkililik) Veri Tipleri
Geliştiriciler çoğu zaman, resim, müzik dosyaları, çalıştırılabilir dosyalar gibi binary olarak adlandırılan türden dosyaları sistemlerinde saklamak zarureti hissederler.
Bu bir insan kaynakları formundan gönderilen, personel adayı resmi olacağı gibi, X sistem üzerine kullanıcılar tarafından yüklenen bir dosya da olabilir.
SQL Server, bu nedenlerden ötürü, üç veri tipini kullanıma sunmaktadır. Şimdi sırası
SQL Server, bu nedenlerden ötürü, üç veri tipini kullanıma sunmaktadır. Şimdi sırası
ile, bu üç veri tipini inceleyeceğiz.
binary(n) 8.000 byte'lık bir saklama kapasitesi vardır. Sabit genişliktedir.
varbinary(n) : 8.000 byte'lık bir kapasitesi vardır. İçerdiği veriye göre boyutu
değişebilir.
varbinary(max) 2 GB'a kadar olan verileri saklayabilir. Alan genişliği içerdiği veriye
göre değişkenlik gösterir.
image : 2 GB'e kadar veri saklayabilir. Alan genişliği, içerdiği veriye göre değişiklik
gösterir.
binary/varbinary veri tiplerini, boyutları 4 ile 6 KB arasında değişen verileri saklamak
için kullanabilirsiniz.
Binary veri tipleri arasında en popüler olanı image veri tipidir. Talihsiz bir isme sahiptir, diyebiliriz. Her türlü ikilik veriyi saklayabileceği halde, isminden ötürü yalnızca image türündeki dosyalarısaklayabileceğine dair bir sanı oluşmaktadır. Resim dosyalarını olduğu gibi, Word, Excel, PDF türündeki dosyaları da image veri tipi içerisinde saklayabilirsiniz.
EK:
varbinary(max) veri tipi, SQL Server 2005 sürümü ile birlikte gelmiştir. image veri
tipi ile aynı kapasitededir ve image veri tipinin saklayabileceği tüm verileri saklayabilir. varbinary(max) tipinde saklanan veriler, tüm operasyon ve fonksiyonlarda kullanılabilmektedir.
Sabit Genişlik ve Değişken Genişlik Nedir?
Bunu bir örnekle anlatmakta fayda var. TC Kimlik numarası sabit genişlikte bir veridir, 11 hane olması zorunludur. Aynı şekilde kredi kartları da 16 hanedir. Bu türsabit genişlikteki veriler için
kullanacağımız veri tipini doğru seçmeliyiz.
Örneğin, TC kimlik numarası için sabit genişlikte veri tipi barındıran, char(11) 'i kullanabiliriz.
declare @tckimlik as char(11)
set @tckimlik='12345678901'
Değişen genişlikteki verilere örnek olarak web adreslerini ya da eposta adreslerini örnek verebiliriz. Kullanıcı datalarını saklayacağımız bir tablomuz olduğunu düşünün. Kullanıcının şayet bir web adresi varsa, bunu da belirtmesini istiyoruz ve bu datayı da veritabanı tablomuzda saklıyoruz.
Web adresleri, maximum 255 karakter olabilir. Bu aslında tablo tasarımımız için de bir kaideyi baştan ortaya koyuyor. Yani web adresini saklayacağımız tablo kolonu en fazla 255 karakter alabilir. Elbette, istisnaları da vardır; kişinnin web adresi 255 karakterden daha da az olabilir.
Web adresi için char tipinde bir kolon tanımladığımızı düşünelim.
declare @char_websiteurl as char(255)
set @char_websiteurl='www.google.com'
Bir de web adresini saklayacağımız kolonu
varchar(255) olarak tanımlayalım:
declare @varchar_websiteurl as varchar(255)
set @varchar_websiteurl='www.google.com'
Şimdi test edelim..
select '|'+@char_websiteurl+'|'
select '|'+@varchar_websiteurl+'|'
Gördüğünüz gibi web sitesini barındıran değişkenleri yazdırırken, pipeler (|) koyarak, metinlerin başladığı ve sonlandığı yerleri işaretledik. Char ve diğer sabit genişlikteki veri tipleri, içinde sakladığınız veri, tanımlanma aşamasında belirtmiş olduğunuz karakter sınırında olsun ya da olmasın, karakter uzunluğunu, tanım esnasında belirtilen alan kadar boşluklarla dolduracaktır.
Bu sebeple, sabit olmayan genişlikteki alanlarınız için, veri tipi tanımlarında işaret ettiğimiz, değişken genişlikteki veri tiplerini kullanmanızı tavsiye ederim.
1 yorum:
Yazı için teşekkürler.
Hepsini okudum bilgi için teşekkürler fakat yeni olduğum için tam olarak hangisi kullanacağımı kestiremiyorum.
Ben sadece sayısal herşey için örneğin kolondaki kullanıcının 0 mı 1 mi olduğunu sorgulamak için int,
sitenin içeriği, fotografların yolu vs. nvarchar.
Yazıdan anladığıma göre sayısal ifade için (0,1) tinyint .
Resim yolları için, nchar
Bizim türkçe karakter sıkıntısı çekmemek için (n)türlerini kullanmamız gerekecek.
Burda kavrayamadığım şu:
nvarchar(n) : 8.000 bytelık kapasitesi vardır. Maksimum 4.000 karakter içerebilir.
nvarchar(max) 2 GB’e kadar veri ve 536.870.912 adet karakter saklayabilir.
Burası aklımı karıştırdı. 2 side 8 bit ikiside nvarchar n dediğimiz nedir? nvarchar max. 4.000 karakter kaplıyosa
o zaman nvarchar(max) = 4.000 olmalı değil mi? 536.870.912 ne oluyor o halde?
nvarchar bildiğim kadarıyla,
nvarchar(50) mesela, max 50 karakter alacak, içeriği 50 karakterden de az ise mesela 34, kalan 16 karakterlik boyut tutmayacak.. Doğrumu bilmiyorum
Standart bir websitesinde mesela (haber) sitesi hangi türü kullanmak faydalı olur?
nvarchar - ntext
Yorum Gönder