MySQL'in DECIMAL'ini tam olarak kavrayamıyorum. 00.0001 ile 99.9999 arasında herhangi bir sayı içerebilmek için satıra ihtiyacım var. Böyle çalışmasını nasıl yapılandırabilirim?
MySQL'in DECIMAL'ini tam olarak kavrayamıyorum. 00.0001 ile 99.9999 arasında herhangi bir sayı içerebilmek için satıra ihtiyacım var. Böyle çalışmasını nasıl yapılandırabilirim?
Yanıtlar:
DOUBLE sütunları DECIMAL sütunlarıyla aynı değildir ve finansal veriler için DOUBLE sütunlarını kullanırsanız sorun yaşarsınız.
ÇİFT aslında sadece bir çift duyarlıklı (64 bit yerine 32 bit) sürümüdür FLOAT . Kayan nokta sayıları gerçek sayıların yaklaşık temsilidir ve tam değildir. Aslında, 0.01 gibi basit sayıların FLOAT veya DOUBLE tiplerinde tam bir temsili yoktur.
DECIMAL sütunları tam temsillerdir, ancak olası daha küçük sayı aralıkları için çok daha fazla yer kaplarlar. İstediğiniz gibi 0.0001'den 99.9999'a kadar değerleri tutabilen bir sütun oluşturmak için aşağıdaki ifadeye ihtiyacınız olacaktır
CREATE TABLE your_table
(
your_column DECIMAL(6,4) NOT NULL
);
Sütun tanımı DECIMAL (M, D) biçimini izler; burada M , maksimum basamak sayısı ( kesinlik ) ve D , ondalık basamağın ( ölçek ) sağındaki basamak sayısıdır .
Bu, önceki komutun -99.9999 ile 99.9999 arasındaki değerleri kabul eden bir sütun oluşturduğu anlamına gelir. Ayrıca 0.0000 ila 99.9999 arasında bir İMZA EDİLMEMİŞ DECIMAL sütunu da oluşturabilirsiniz.
MySQL DECIMAL hakkında daha fazla bilgi için resmi dokümanlar her zaman mükemmel bir kaynaktır.
Tüm bu bilgilerin MySQL 5.0.3 ve sonraki sürümleri için geçerli olduğunu unutmayın. Önceki sürümleri kullanıyorsanız, gerçekten yükseltmeniz gerekir.
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
. Negatif değerler için aralık dışı bir hata döndürür. Aynı şekilde imzasız FLOAT ve DOUBLE oluşturabilirsiniz. El kitabı: dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html
Yukarıdaki cevaplar doğru görünse de, size nasıl çalıştığı hakkında bir fikir vermek için basit bir açıklama.
Sütununun olarak ayarlandığını varsayalım DECIMAL(13,4)
. Bu, sütunun toplam 13 basamak büyüklüğüne sahip olacağı, bunlardan 4'ünün hassas gösterim için kullanılacağı anlamına gelir.
Özet olarak, bu sütun için maksimum değeriniz olacaktır: 999999999.9999
Yorumlarda doğru çözümler var, ancak bunları tek bir cevapta özetlemek gerekirse:
DECIMAL (6,4) kullanmalısınız.
Sonra ondalık noktadan (ölçek) önce 2 ve 4 olmak üzere 6 toplam basamak sayısına sahip olabilirsiniz. Göre En azından bu .
MySQL 5.x şartname ondalık veri türü içindir: DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
. Yukarıdaki cevap imzasız ondalık sayıların mümkün olmadığını söylemekte yanlıştır.
Ondalık değerler 4 tanesi 6 basamak, toplam uzunluğu sadece işaretsiz ondalık sayılar sağlayan bir alan tanımlamak üzere, kullanmak: DECIMAL (6,4) UNSIGNED
.
Aynı şekilde imzasız (yani negatif olmayan) FLOAT ve DOUBLE veri türleri oluşturabilirsiniz.