Mysql cinsinden int (11) sütununun bayt cinsinden boyutu nedir?


488

int(11)Mysql cinsinden sütunun bayt cinsinden büyüklüğü nedir ?

Ve bu sütunlarda saklanabilecek maksimum değer?



1
@ cellepo biri mysql için özel bir genel sql (artı bu yol daha fazla görüş vardır). Eğer bir dupe avına çıkmak ve bir oyunda çabucak kapatmamı istiyorsanız, SOBotics sohbetini ziyaret edin ve bana ping atın . Ama kapatmak mysqliçin benim varış önce etiketlenmesi gerekir . Teşekkürler
Drew

6
Hey Millet. Muhtemelen yineleniyor, ancak daha arama dostu. Çoğu insan int (11) kullanarak böyle arama yapar. ve diğer insanların sorularını çözüyor. görüşünü diğeriyle karşılaştırmalı olarak kontrol edebilirsiniz. ve kullanıcı burada daha ayrıntılı cevap bulacaktır.
Gaurav

Yanıtlar:


685

Bir INTuzunluk belirtilirse her zaman 4 bayt olur.

  • TINYINT = 1 bayt (8 bit)
  • SMALLINT = 2 bayt (16 bit)
  • MEDIUMINT = 3 bayt (24 bit)
  • INT = 4 bayt (32 bit)
  • BIGINT = 8 bayt (64 bit).

Uzunluk, mysql komut satırı istemcisiyle veri seçerken kaç karakter kullanılacağını belirtir. 12345 int(3), hala 12345 olarak gösterilir, ancak int(10)hala 12345 olarak görüntüleniyorsa depolanırsa , ilk beş basamağı doldurma seçeneğiniz olur. Örneğin, eklediyseniz ZEROFILL0000012345 olarak görüntülenir.

... ve maksimum değer 2147483647 (İmzalı) veya 4294967295 (İmzasız) olacaktır


111
burada int (11) 'de 11'in anlamı nedir.
Gaurav

73
Sütun INT (4), tamsayı 1 SADECE 0001 olarak görüntülenir, eğer sütun da sıfır dolgusu olarak belirtilirse. Aksi takdirde, ekstra rakamlar olmadan sadece 1 numara olarak görüntülenecektir. @Gaurav - mysql'in verileri nasıl görüntülediğini ve nasıl sakladığını karıştırmayın, bunlar iki farklı şeydir. Gördüğünüz şey gerçekten ne olduğu değil.
Michael JV

13
@Michael Wow, gerçekten ilginç. Bir sütun INT (3) oluşturursanız ve 5001 değerini saklarsanız, 5001'i depolar, ancak yalnızca 1'i görüntüler. Bunu bilmiyordum.
andrewtweber

16
@andrewtweber: alan olarak tanımlanmış olsa bile 5001görüntülenir . Aşağıdaki ve burada @priyabagus cevabına bakınız . 5001INT(3)
go2null

10
Tamsayı alanları için bir uzunluk sağlamazsanız, MySQL varsayılan bir değer ayarlayacaktır (tinyint 4, smallint 6, mediumint 9, int 11, bigint 20) Bu varsayılan uzunlukların herhangi bir sayıyı görüntülemek için yeterli olduğunu belirtmek gerekir. bu alanda saklanabilir (ör: smallint max değeri 2 ^ 16 = 65536, 5 basamaklı) Aksi takdirde çok iyi bir nedeniniz olmadıkça, kötü sürprizlerden kaçınmak için varsayılan boyutları bırakmanızı tavsiye ederim.
Thibault Witzig

167

INT ( x ) sadece gösterim açısından fark yaratacaktır , yani sayıyı x hanede gösterecek ve 11 ile sınırlandırılmayacaktır. Bunu kullanarak eşleştirin ZEROFILL.

Yani, herhangi bir sayıdaki x içinINT(x)

  • depolanmış değer daha az basamak eğer x , ZEROFILLsıfır başa eklemek olacaktır.

    INT (5) zerofill gösterecektir 32 saklanan değeri ile 00.032
    INT (5) 32 saklanan değeri ile gösterilir 32
    INT gösterecektir 32 depolanmış değerle 32

  • saklanan değerin x değerinden daha fazla basamağı varsa, olduğu gibi gösterilir.

    INT (3) zerofill gösterir 250000 depolanan değeri ile 250000
    INT (3) gösterir 250000 depolanan değeri ile 250000
    INT gösterir 250000 depolanan değeri ile 250.000

Veritabanında saklanan gerçek değer etkilenmez, boyut hala aynıdır ve herhangi bir hesaplama normal şekilde davranacaktır.

Bu, BIGINT, MEDIUMINT, SMALLINT ve TINYINT için de geçerlidir.


49
Sıfır doldurma kullanmadığınız sürece uzunluk kesinlikle hiçbir şey yapmaz?
developerbmw

29
@developerbmw - Doğru. Uzunluk kullanmadığınız sürece kesinlikle hiçbir şey yapmaz ZEROFILL.
Rick James

ZEROFILL aslında anabilgisayar uyumluluk modudur.
Henk Poley

114

Buraya göre , maksimum değer ve min değeri int(11)olan 32 bit alan olan 4 bayt alan alacaktır . Bir bit işareti içindir.2^(31) = 2147483648-2147483648


1
Örneğin 9 dokuzu var. Lütfen örneğinizin doğru olduğunu onaylar mısınız? Eğer öyleyse, 9 dokuz olduğunda neden 10 diyor? Rakam sayısı artı bir artı işaret karakteri mi?
Homer6

5
Hayır, imzalanmamış int ise maksimum sayı 4294967295'tir, yani 2 ^ 32. Köşeli parantez içindeki sayı depolama türünü etkilemez. 2 ^ 32'den fazlasına ihtiyacınız varsa, bigint'e gitmeniz gerekir.
Kieran Tully

7
Daha doğrusu, (2 ^ 32) -1.
Kieran Tully

2
+ Kieran haklı. Maksimum sayı yanıttaki sayıdan farklı. Buraya
daviewales

38

Diğerlerinin de söylediği gibi, sütunun depolayabileceği minimum / maksimum değerler ve baytlarda ne kadar depolama alanı alacağı, yalnızca tipe göre belirlenir, uzunluk değil.

Bu yanıtların çoğu, (11)parçanın yalnızca tam olarak doğru olmayan, ancak çoğunlukla ekran genişliğini etkilediğini söylüyor .

Bir tanım int(2)ile belirtilen hiçbir zerofill yapacaktır:

  • hala bir değerini kabul ediyorum 100
  • hala görüntüler arasında bir değere 100ne zaman çıkışı (değil 0veya 00)
  • ekran genişliği seçme sorgu büyük değerini çıkış genişliği olacaktır.

Sıfır dolgu da belirtilirse(2) yapılacak tek şey :

  • değeri 1gösterilecektir 01.
  • Değerleri görüntülerken sütun , sütunun o belirli seçme sorgusunda göstermesi gereken en büyük değeri görüntülemek için gereken minimum genişlik yerine, tamsayı için 10 basamak olan, mümkün olan maksimum değerin genişliğine sahip olacaktır. çok daha küçük olabilir.
  • Sütun yine de alabilir ve uzunluğu aşan bir değer gösterebilir, ancak bu değerlere 0s öneki eklenmez.

Tüm nüansları görmenin en iyi yolu koşmaktır:

CREATE TABLE `mytable` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `int1` int(10) NOT NULL,
    `int2` int(3) NOT NULL,
    `zf1` int(10) ZEROFILL NOT NULL,
    `zf2` int(3) ZEROFILL NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `mytable` 
(`int1`, `int2`, `zf1`, `zf2`) 
VALUES
(10000, 10000, 10000, 10000),
(100, 100, 100, 100);

select * from mytable;

hangi çıktı:

+----+-------+-------+------------+-------+
| id | int1  | int2  | zf1        | zf2   |
+----+-------+-------+------------+-------+
|  1 | 10000 | 10000 | 0000010000 | 10000 |
|  2 |   100 |   100 | 0000000100 |   100 |
+----+-------+-------+------------+-------+

Bu yanıt Linux için MySQL 5.7.12'ye göre test edilmiştir ve diğer uygulamalar için değişebilir veya değişmeyebilir.


5
"Uzunluk daha büyük olsa da int1 sütununun sıfır dolgusundan çok daha küçük bir görüntüleme genişliğine sahip olduğuna dikkat edin" ... Ehm, bunun nedeni 'zerofill2' sütun adının 9 karakter uzunluğunda olması ve '
int1'in

2
... evet, sıfır doldurma etkinleştirilmediğinde bile ekran genişliğinde bile uzunluk açıkça görülmez. Aksi takdirde int1, 10 karakter genişliğinde çok daha geniş olur.
Programcı

2
Sağlam bir örnekle iyi bir açıklama. Cevaptan daha iyi cevap. Teşekkürler @Programster.
Corin

Küçük nit: Neokio'nun belirttiği gibi, bu sorgudan sıfır dolgulu "int (3)" nin kesin sonuçlarını gözlemleyemez. Davranışı daha net hale getirmek için sütun adını "zf2" olarak kısaltın. Özellikle, doğru veya yanlış [verilen DB sürümünde] o "(sıfır dolgulu) Değerleri görüntülerken, sütun her zaman bir tamsayı için 10 basamak olan sütunun alabileceği maksimum değerin genişliğine sahip olur"
ToolmakerSteve

1
Neokio'nun açıklamasını ve küçük nit açıklamamı açıklığa kavuşturmak için: "Int1 sütununun, uzunluk daha büyük olmasına rağmen, sıfır dolgusundan2 çok daha küçük bir görüntüleme genişliğine sahip olduğuna dikkat edin." cevaptan çıkarılmalıdır. Bu, "zerofill2" başlık kelimesindeki karakter sayısının bir sonucudur - ekran genişliklerinin test edilmesiyle ilgisi yoktur. Bu sütuna daha kısa bir ad vermek daha iyidir, örneğin "zf2". Daha sonra "int1, int2 ve zf2'nin tam olarak aynı genişlikte olduğu bir tabloya sahip oluruz, int2 ve zf2 küçük bir genişlik (3) belirtmesine rağmen".
ToolmakerSteve

32

Mysql cinsinden int (11) sütununun bayt cinsinden boyutu nedir?

(11)- intveri türünün bu özelliğinin sütun boyutuyla ilgisi yoktur. Sadece tamsayı veri türünün görüntüleme genişliğidir. Gönderen 11.1.4.5. Sayısal Tür Nitelikleri :

MySQL, isteğe bağlı olarak, türün temel anahtar sözcüğünü izleyen parantez içindeki tamsayı veri türlerinin görüntüleme genişliğini belirtmek için bir uzantıyı destekler. Örneğin, INT (4), ekran genişliği dört basamaklı bir INT belirtir.


19

Bunun için iyi bir açıklama burada bulunabilir

: Özetlemek gerekirse: int (N) cinsinden N sayısı, varchar (N) durumunda olduğu gibi, genellikle sütun için izin verilen maksimum boyutla karıştırılır.

Ancak, Tamsayı veri türlerinde durum böyle değildir - parantez içindeki N sayısı sütun için maksimum boyut değildir, ancak MySQL'e tablonun verileri MySQL aracılığıyla görüntülendiğinde sütunun hangi genişlikte görüntüleneceğini gösteren bir parametredir. konsolu (ZEROFILL özelliğini kullanırken).

Köşeli parantez içindeki sayı, MySQL'e gelen tamsayıların kaç tane sıfırlanacağını bildirir. Örneğin: INT (5) olarak ayarlanmış bir sütunda ZEROFILL kullanıyorsanız ve 78 sayısı eklenmişse, sayı köşeli parantez içindeki sayıyı karşılayana kadar MySQL bu değeri sıfırlarla doldurur. yani 78 00078, 127 ise 00127 olacaktır. Özetlemek gerekirse: Parantez içindeki sayı gösterim amacıyla kullanılır.
Bir şekilde, ZEROFILL özelliğini kullanmadığınız sürece parantez içindeki sayı işe yaramaz.

Yani int için boyut aynı kalır, yani imzalı için -2147483648 ila 2147483648 ve imzasız için 0 ila 4294967295(~ 2.15 milyar ve 4.2 milyar, bu da geliştiricilerin 2 milyardan fazla satır içermedikçe veritabanını etkilemediği için parantez içindeki N Numara'nın arkasındaki hikayeden habersiz kalmasının nedenlerinden biridir) ve bayt olarak olurdu 4 bayt .

Tamsayı Türlerinin boyutu / aralığı hakkında daha fazla bilgi için MySQL Kılavuzuna bakın


Burada neden satır sayısı devreye giriyor?
Old Geezer

@OldGeezer - "satır sayısı" ifadesinin çoğu sütun için alakasız olduğunu kabul edin. Yalnızca otomatik artan birincil anahtar (id) sütunu için geçerlidir.
ToolmakerSteve

10

Bu cevabın görülmesi olası olmasa da, aşağıdaki açıklamaların yapılmaya değer olduğunu düşünüyorum:

  • MySQL'de bir tamsayı veri türünün arkasındaki (n) görüntüleme genişliğini belirtiyor
  • görüntüleme genişliği bir sorgudan döndürülen sayının uzunluğunu sınırlamaz
  • görüntüleme genişliği, sıfırla doldurulmuş bir sütun için doldurulan sıfır sayısını sınırlar, böylece toplam sayı görüntüleme genişliğiyle eşleşir (gerçek sayı görüntüleme genişliğini aşmadığı sürece sayı olduğu gibi gösterilir)
  • görüntüleme genişliği, geliştiricilerin değerin hangi uzunlukta doldurulması gerektiğini bilmesi için de yararlı bir araçtır.

DETAY BİTİĞİ
ekran genişliği, görünüşe göre, sıfır doldurulmuş bir sayıda kaç tane sıfır gösterileceğiyle ilgili bazı meta veriler sağlamayı amaçlamaktadır.
Bu sayı, belirtilen görüntüleme genişliğinin üzerine çıkarsa, sorgudan döndürülen sayının uzunluğunu sınırlamaz. MySQL'de
bir tamsayı veri türü için gerçekte hangi uzunluk / genişliğe izin verildiğini bilmek için listeye ve bağlantıya bakın: ( türler: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT );
Yukarıda belirtilenleri söyledikten sonra, sütunlar ZEROFILL sütunları olarak
VEYA
verilerin bir uygulamaya çekilmesi ve uygulamanın toplanması durumunda, görüntüleme genişliğinin standart bir sorgudan elde edilen sonuçlar üzerinde herhangi bir etkisi olmasını bekleyebilirsiniz . başka bir tür dolgu için kullanılacak ekran genişliği.

Birincil Referans: https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean


Doğru cevabı verdiğiniz için teşekkür ederiz. MySQL komut satırından çalışıyordum ve herhangi bir rakamı küçük nharflerle silmeyi başaramadım, bu yüzden ... evet, bu bullcrap. Sadece sıfır dolgulu her şeyi yapar.
mpen

@mpen yardımcı olabilirim, bu çalıştığım bir şeyle ilgiliydi ve buraya bir başkası için yararlı olabilecek daha fazla ayrıntı koyabileceğimi düşündüm.
MER

9

MySQL tamsayı int(11)boyutu 32 bit eşit 4 bayt vardır.

İmzalanan değer: - 2^(32-1) to 0 to 2^(32-1)-1 = -2147483648 to 0 to 2147483647

İmzasız değerler: 0 to 2^32-1 = 0 to 4294967295


0

bu kitaba göre :

MySQL, INT (11) gibi tamsayı türleri için bir “genişlik” belirlemenizi sağlar. Bu, çoğu uygulama için anlamsızdır: yasal değer aralığını kısıtlamaz, ancak MySQL'in etkileşimli araçlarının görüntüleme amacıyla ayıracağı karakter sayısını belirtir. Depolama ve hesaplama amaçlı olarak INT (1), INT (20) ile aynıdır.


-4

Sanırım int (11) 'in maksimum değeri 4294967295


2
2147483647 çünkü işareti var.
d3bit

-9

4294967295 cevaptır, çünkü int (11) en fazla 11 basamak IMO gösterir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.