Char ve Varchar Veritipi Arasındaki Farklılıklar
Char veri tipinde sabit uzunlukta karakter tutabilir. Tanımlanmış olan karakter uzunluğundan daha az bir veri eklenirse, veri tipi Char olduğu için tanımlanan uzunluğa ulaşması için veri boşluk ile tamamlanır.
Varchar ise değişken uzunlukta karakter verisi alabilir. Tanımlanmış olan karakter uzunluğundan daha az bir veri eklenirse, veri tipi Varchar olduğu için tanımlanan uzunluğa ulaşması için herhangi bir değer eklemesi yapılmaz. Girilen karakter verisi kadar hücrede bellek işgal eder.
Ufak bir örnek ile bu farlı görelim;
[sql]
DECLARE @CharName char(10)=’mesut’,
@VarcharName varchar(10)=’mesut’
SELECT CharLength= DATALENGTH(@CharName) ,Varcharlength=DATALENGTH(@VarcharName)
[/sql]
Şimdi 2 Char tipindeki veriyi birleştirme işlemi yapalım. Veri uzunluğu nasıl tanımlanacak görelim.
[sql]
DECLARE @CharName char(10)=’mesut’,
@CharSurname char(10)=’GÜNEŞ’
SELECT NameSurname=@CharName+@CharSurname, [Length]= LEN(@CharName+@CharSurname)
[/sql]
Aynı sorguyu varchar veri tipine dönüştürüp çalıştırdığımızda ise;
[sql]
DECLARE @VarCharName varchar(10)=’mesut’,
@VarCharSurname varchar(10)=’GÜNEŞ’
SELECT NameSurname=@VarCharName+@VarCharSurname, [Length]= LEN(@VarCharName+@VarCharSurname)
[/sql]
yukarıdaki resimde de görüldüğü gibi kullanılmayan herhangi bir karakter eklemesi yapılmamaktadır. Karakter seti uzunluğu kadar bellekte alan işgal etmektedir.
Son olarak bir örnek ile konuyu tamamlayalım. Örneğimizde hem Char hemde Varchar veri türü için koşul karşılaştırması yapılacaktır. Char ile mantıksal ifade kullanarak karşılaştırma yaparken dikkat etmemiz gereken noktayı tespit etmiş olalım.
Yukarıdaki resimde de görüldüğü gibi değişken türü yüzünden doğru olan koşul yanlış çalışmaktadır. Bu sorunu aşmak için “RTRIM ” fonksiyonu ile boşlukları temizlemek yeterli olacaktır.
Peki varchar değişken türü kullandığımızda da aynı sonuçla mı karşılaşacağız?
Varchar veri türü girilen karakter dizesi kadar bellekte yer ayırdığı için Char veri türündeki gibi boşluk temizleme ihtiyacımız olmamaktadır.
Not: Veritabanınızı tasarlarken Char veri türünü girilecek karakter sayısı belli olan alanlar için kullanmanızı tavsiye ederim. Ör. Telefon numarası, Posta kodu vs.