|
Yazan
|
Konu: [Çözüldü] MySQL Sütun Sayısal Öznitelikleri (Okunma Sayısı 810 defa)
|
Allow-Man
Alaattin Kahramanlar
PHP Öğrencisi
Offline
Mesaj Sayısı: 111
|
Merhabalar,
MySQL kullanma kılavuzunda tinyint, smallint, mediumint, ing ve bigint 'in kaç byte olacağı tanımlanmış. Söz gelimi int için 4 byte tutar diyor. Bu 28*28*28*28 yani 4294967296. INT olan bir alan UNSIGNED tanımlanırsa bu durumda sütunda en fazla 4294967295 saklanabiliyor.
Benim sormak istediğime gelmek istiyorum, bu niteliklerin kaç byte olduğu belli ise INT(1) ile INT(10) un farkı nedir, daha da ötesinde 1,10 vesaire esasen neyi ifade ediyor?
Teşekkür ederim.
|
|
|
|
« Son Düzenleme: 05, 2006, 03:40:51 pm Gönderen: Allow-Man »
|
Logged
|
while(1) work;
|
|
|
|
aziz
|
int 1 olursa 1 tek rakam girebilirsiniz. 10 olursa 10 rakam yayana.
Hemen düzelteceğim ,kusura bakmayın
|
|
|
|
« Son Düzenleme: 01, 2006, 11:14:48 am Gönderen: aziz »
|
Logged
|
|
|
|
Allow-Man
Alaattin Kahramanlar
PHP Öğrencisi
Offline
Mesaj Sayısı: 111
|
Aziz bu bilginin doğru olduğuna emin misin? INT(2) olan alana "1000"i girebiliyorum?? int 1 olursa 1 tek rakam girebilirsiniz. 10 olursa 10 rakam yayana.
|
|
|
|
|
Logged
|
while(1) work;
|
|
|
|
aziz
|
INT -2147483648 ile 2147483647 arasında bir değer alır , pozitifse 0 ile 4294967295
BIGINT -9223372036854775808 ile 9223372036854775807 arasında bir değer alır, pozitif olursa 0 ile 18446744073709551615 arası bir değer alır.
Yanıltan rakam "0" , yanyana gelmesi ile ilgili
INT (2) INT(10) ise UNSIGNED ZEROFILL seçeneği aktif hale getirildiğinde örneğin INT(2) de 01 02 03 INT(10)da ise 0000000001 0000000002 0000000003 şeklinde görüntü sağlayacaktır. eğer INT(10) iken UNSIGNED ZEROFILL seçeneği aktifse gidğiniz kayıt kaç rakamlı (sınırlar dahilinde) olursa olsun 10 hane dolana kadar sayının başına 0 konacaktır
|
|
|
|
« Son Düzenleme: 01, 2006, 11:26:05 am Gönderen: aziz »
|
Logged
|
|
|
|
Allow-Man
Alaattin Kahramanlar
PHP Öğrencisi
Offline
Mesaj Sayısı: 111
|
Evet bu daha açıklayıcı oldu teşekkür ederim ancak halen sorun var, şöyle ki söylediklerinizden anladıklarımı özetlemem gerekirse, 1. INT diyerek o alana girilebilecek en büyük sayıyı tanımlamış oluyoruz, sözgelimi UNSIGNED için bu alan değeri 4294967295'i geçemez. 2. INT(x) diyerek girilecek değerler için ayrılacak (allocate edilecek) varsayılan alanı belirliyoruz, x burada basamak sayısını belirliyor (Onluk sistemde). 3. x>10 değerleri otomatikman INT için anlamsız hale geliyor, ancak INT(15) diye bir alan oluşturmaya çalıştığımızda da bir hata dönmüyor MySQL. Pekala şimdi sorunlara geleyim, aşağıda mysql çıktılarını veriyorum. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 241 to server version: 4.1.9-max
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
Database changed mysql> CREATE TABLE `deneme_tablosu` ( -> `id` TINYINT( 2 ) NOT NULL , -> PRIMARY KEY ( `id` ) -> ); Query OK, 0 rows affected (0.13 sec)
mysql> INSERT INTO deneme_tablosu (id) VALUES(111); Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO deneme_tablosu (id) VALUES(111); Query OK, 1 row affected (0.00 sec)
mysql> SELECT id FROM deneme_tablosu; +-----+ | id | +-----+ | 111 | +-----+ 1 row in set (0.00 sec)
Gördüğün gibi TINYINT(2) tanımladığım tabloya 3 basamaklı bir sayı girebiliyorum; bu durumda benim senin anlattıklarından yanlış anladığım bir şey mi var? Zamanın için şimdiden teşekkürler INT -2147483648 ile 2147483647 arasında bir değer alır , pozitifse 0 ile 4294967295
BIGINT -9223372036854775808 ile 9223372036854775807 arasında bir değer alır, pozitif olursa 0 ile 18446744073709551615 arası bir değer alır.
Yanıltan rakam "0" , yanyana gelmesi ile ilgili
INT (2) INT(10) ise UNSIGNED ZEROFILL seçeneği aktif hale getirildiğinde örneğin INT(2) de 01 02 03 INT(10)da ise 0000000001 0000000002 0000000003 şeklinde görüntü sağlayacaktır. eğer INT(10) iken UNSIGNED ZEROFILL seçeneği aktifse gidğiniz kayıt kaç rakamlı (sınırlar dahilinde) olursa olsun 10 hane dolana kadar sayının başına 0 konacaktır
|
|
|
|
|
Logged
|
while(1) work;
|
|
|
|
aziz
|
Hayır anladıklarınız doğru. Ancak eğer int alanına mesela (12) yazılması durumunda (tam olarak burada bir istisna yönetimi var mı bimiyorum ama...) tablo için bir optimizasyon sorunu oluşacak ve verimi düşecektir diye "tahmin" ediyorum. Veri tabanlarında çok daha uzman olan arkadaşlarımız bilgilerini paylaşırlarsa sevinirim.
|
|
|
|
|
Logged
|
|
|
|
Allow-Man
Alaattin Kahramanlar
PHP Öğrencisi
Offline
Mesaj Sayısı: 111
|
Hocam yazdığım bir önceki yazıdaki "x burada basamak sayısını belirtiyor (Onluk sistemde)" ifadesi yanlış o halde? Optimizasyon konusundaki öngörülerinizde haklısın ancak sanırım x alanın değeri için bir limit değil, denemelerim öyle gösterdi. Net bilgisi olan yok mudur bu konuda?Hayır anladıklarınız doğru. Ancak eğer int alanına mesela (12) yazılması durumunda (tam olarak burada bir istisna yönetimi var mı bimiyorum ama...) tablo için bir optimizasyon sorunu oluşacak ve verimi düşecektir diye "tahmin" ediyorum. Veri tabanlarında çok daha uzman olan arkadaşlarımız bilgilerini paylaşırlarsa sevinirim.
|
|
|
|
|
Logged
|
while(1) work;
|
|
|
Witkey
Ziyaretçi
|
|
|
|
|
|
Logged
|
|
|
|
Allow-Man
Alaattin Kahramanlar
PHP Öğrencisi
Offline
Mesaj Sayısı: 111
|
Onur sağol aşağıda siteden alıntı yaptım; Aziz'in söyledikleri ile paralel; konuyu kapatabiliriz. If you assign a value to a BIT(M) column that is less than M bits long, the value is padded on the left with zeroes. For example, assigning a value of b'101' to a BIT(6) column is, in effect, the same as assigning b'000101'.
|
|
|
|
|
Logged
|
while(1) work;
|
|
|
|
 |