Site Renkleri

Mysql Dersleri

Veri Nitelikleri



1. KARAKTER NİTELİKLER
CHAR

Belirli sayıdaki karakteri saklamak için kullanılır.
Şayet saklanan değer tanımlanan genişlikten kısa ise, karakter kümesinin sağ tarafına tanımlı genişliğe gelene kadar MySQL tarafından boşluk karakteri eklenir.
Örneğin, CHAR(5) tanımlamasını, bu alanda daima 5 karakter uzunluğundaki değerleri saklamak istediğimizde kullanırız. Şayet bu alana "ABC" karakter kümesi eklenecek olursa veritabanında saklanma şekli "ABC "dir.
VARCHAR

Değişken sayıdaki karakterleri saklamak için kullanılır.
Nitelik tanımlamasında girilen değer saklanacak en büyük karakter uzunluğudur.
MySQL 4.1 belirtimlerine göre bir VARCHAR alan en çok 255 karakter (1 byte=28) saklayabilir, ancak MySQL 5'ten sonra 255 ya da 65535 (2 byte) karakter saklayabilirsiniz.
Şayet tanımlanandan (n olsun) daha uzun bir karakter kümesi girme girişiminde bulunursanız ilk n karakteri veritabanına kaydedilecek geri kalan karakterleri kaybetmiş olacaksınızdır.
2. SAYISAL NİTELİKLER

TINYINT

Belirli genişlikte ikili saklar, her zaman 1 byte'dır.
Yukarıdaki ifadenin pratikteki anlamı tinyint alanda en fazla 255 (28-1) sayının saklanabileceğidir.
Şayet sütunu SIGNED olarak tanımlamışsanız, saklanabilecek en büyük pozitif sayı 127, en küçük negatif sayı da -127 olur; 0(sıfır)'ı da sayarsanız 255 sayı tanımlamış oluruz.
Öte yandan değerlerinizin işaretinin aynı olacağını biliyorsanız, sütunu UNSIGNED yaparak; en büyük pozitif sayı limitini 255'e taşıyabilirsiniz.
SMALLINT

Belirli genişlikte ikili saklar, her zaman 2 byte'dır.
SIGNED özelliği ile saklanabilecek en büyük pozitif sayı , en küçük negatif sayı da -32767.
UNSIGNED olarak en büyük (28*28)-1 = (32767*2)-1 = 65'535 olur.
MEDIUMINT

Belirli genişlikte ikili saklar, her zaman 3 byte'dır.
SIGNED özelliği ile saklanabilecek en büyük pozitif sayı 9'199'871, en küçük negatif sayı da -9'199'871.
UNSIGNED olarak en büyük (28*28*28)-1 = 18'399'743 olur.
INT

Belirli genişlikte ikili saklar, her zaman 4 byte'dır.
SIGNED özelliği ile saklanabilecek en büyük pozitif sayı 2'147'483'647, en küçük negatif sayı da -2'147'483'647.
UNSIGNED olarak en büyük (28*28*28*28)-1 = 4'294'967'295 olur.
BIGINT

Belirli genişlikte ikili saklar, her zaman 8 byte'dır.
Yine benzer şekilde, UNSIGNED olarak (28*28*28*28*28*28*28*28)-1 = 18'446'744'073'709'551'616 sayısı saklanabilir; şayet SIGNED olarak kullanacaksanız da bunun yarısı kadar bir değer tutabilirsiniz.
2. ZAMANSAL NİTELİKLER

DATE

Veritabanında saklanma şekli 3 byte'dır.
Tarih saklamak için kullanılır.
En az etkili (significant) basamak en önce saklanır; yani varsayılan depolama biçimi 'yyyy-aa-gg' dir (y: yıl, a: ay, g:gün)
DATETIME

Veritabanında saklanma şekli 8 byte'dır.
Tarih ve zamanı saklamak için kullanılır.
Varsayılan depolama biçimi 'yyyy-aa-gg SS:dd:ss' dir. (y: yıl, a: ay, g:gün, S: saat, d: dakika, s: saniye)
TIME

Veritabanında saklanma şekli 3 byte'dır.
Zamanı saklamak için kullanılır.
Varsayılan depolama biçimi 'SS:dd:ss' dir. (y: yıl, a: ay, g:gün, S: saat, d: dakika, s: saniye)
TIMESTAMP

Varsayılan depolama şekli 4 byte'dır. Bir UNIX fonksiyonu olan time() fonksiyonu ile aynı işi yapar.
Epoch ismi verilen (00:00:00 UTC, Ocak 1, 1970) tarihinden o ana kadarki zaman uzaklığı saklayabilen bir alandır.
YEAR

UNSIGNED TINYINT gibi saklanır.
Farkı ise YEAR alanının 1901 ötelenmiştir. (YEAR) 0 = 1901 olarak düşünülebilir.
Bazı İpuçları

Veritabanı alanlarınızın niteliklerini tanımlarken, gereksinimlerinizi mutlaka belirleyiniz. Örneğin üye sıra no tutacak bir alan tanımlarken yaklaşık ne kadar üyeniz olacağını düşününüz; 100 kişi civarında bir üye potansiyeli öngörüyorsanız bunun için BIGINT tanımlamayınız, bu ciddi performans israfıdır.
Veritabanında saklayacağınız verileri mutlaka veri tipine uygun tanımlanmış alanlarda saklayınız. Sadece rakamlardan oluşacak bir alanı ya da tarih tipinde bir veriyi asla ve asla VARCHAR tipinde saklamayınız; bu veritabanının sizin veritipine özel sunduğu bir çok güzel özellikten (Sıralama seçeneği esneklikleri gibi) feragat etmektir.
Veritabanında bir işlemin yapılma zamanını girecekseniz,yani o anki zamana ihtiyacınız varsa bunun için PHP kodunuz içinde date() fonksiyonu ile o anki zamanı oluşturup girmenize gerek yoktur, zaten MySQL'de NOW() diye bir fonksiyon vardır, çoğu kişinin farkında olmadığı.
Ve son olarak -kendimi yineliyor gibi olacağım ama- veritabanı tasarımı gerçekten önemli bir iştir, bir uygulama yazmadan veritabanı tasarımına yeterli zamanı ayırınız.

Diğer Mysql Dersleri

Web Tasarımı | Site Tasarımı | Bilgisayar Dersleri | Hosting | Domain