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]

char_vs_varchar

Ş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]

char_concanate

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]

varchar_concanate

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.

IF_char_false_value

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.

IF_char_true_value

Peki varchar değişken türü kullandığımızda da aynı sonuçla mı karşılaşacağız?

IF_varchar_required

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.

kaspersky satın al

Mesut Güneş

Selçuk Üniversitesi Bilgisayar programcılığı bölümünden mezun olduktan sonra birçok firmada Yazılım, İş zekası ve Veritabanı Uzmanı olarak çalıştım. Şuan Türkiye’nin en büyük şirketlerinden biri olan Doğan Online’da Veritabanı Yöneticisi olarak çalışıyorum.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.