SQL Server da Char, VarChar, NChar ve NVarChar Data Tipleri

SQL Server da string ifadeleri saklamak için Char, VarChar, NChar ve NVarChar data tipleri kullanılmaktadır.

Peki hangi durumlarda bu 4 seçenekten hangisini kullanmak daha performanslı bir çözüm olur.

Genel hatlarıyla NChar ve NVarChar data tiplerinin UniCode ifade saklanması planlanan alanlar için kullanılmasında fayda vardır. Çünkü bu data tipler N siz olan versiyonlara göre 2 kat daha fazla yer kaplamaktadır.

VarChar ın Char dan farkı ise; Char,içindeki veri ne olursa olsun belirtildiği n değeri kadar yer kaplarken;varchar,içerisinde belirtildiği string kadar yer kaplar. Dolayısıyla tanımlanan alana girilecek bilgiler çoğunlukla aynı boyutta olacaksa Char kullanmak, farklı boyutta bilgiler girilecekseVarChar kullanmak daha mantıklıdır.

Reel hayattan bir örnek vermek gerekirse; Ad-SoyAd gibi alanlara girilecek bilgiler aynı boyutta olmayacaktır dolayısıyla böyle alanları varchar tanımlamak daha mantıklıdır. Posta Kodu ve Telefon gibi alanlara ise girilecek bilgiler çoğunlukla aynı boyutta olacaktır dolayısıyla bu alanlarıda char olarak tanımlamak daha mantıklı olacaktır.

Örneğin Char(10) diye tanımlanmış bir alana “TEST” ifadesi yazılırsa geri kalan kısma “ ” eklenecek ve reel data aslında “TEST ” şeklinde olacaktır.

Data tiplerinin storage de kapladıkları alanlar şu şekildedir; (n) genişliğinde tanımlama yapıldığı, ve değişkenin içine (l) uzunluğunda bir değer girildiği düşünülürse;

Data Type (n) Değeri Storage de Kapladığı Alan
Char (n) (l) 1 – 8000 N
VarChar (n) (l) 1 – 8000 l + 2
NChar (n) (l) 1 – 4000 2 * n
NVarChar (n) (l) 1 – 4000 2*l + 2

Örneğin NChar(10) olarak tanımlanmış bir alana “test” string i girilirse bu alan storage de 2*10 = 20 byte lık bir alan kaplayacaktır.

Aynı örnek için;

  • Char -> 10 byte
  • VarChar -> 4+2=6 byte
  • NChar -> 2*10 = 20 byte
  • NVarChar -> 2*4+2=10 byte

Yer kaplayacaktır.

DECLARE @dt_char char(10)
       ,@dt_varchar varchar(10)
	   ,@dt_nchar nchar(10)
       ,@dt_nvarchar nvarchar(10)

SELECT @dt_char = 'TEST'
      ,@dt_varchar = 'TEST'
      ,@dt_nchar = 'TEST'
      ,@dt_nvarchar = 'TEST' 

SELECT 'Char' as DataType,DATALENGTH(@dt_char) as Boyut
UNION ALL
SELECT 'VarChar' as DataType,DATALENGTH(@dt_varchar)+2 as Boyut
UNION ALL
SELECT 'NChar' as DataType,DATALENGTH(@dt_nchar) as Boyut
UNION ALL
SELECT 'NVarChar' as DataType,DATALENGTH(@dt_nvarchar)+2 as Boyut

image_thumb

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s