MySQL'de tinyint, smallint, mediumint, bigint ve int arasındaki fark nedir?
Hangi durumlarda bunlar kullanılmalıdır?
MySQL'de tinyint, smallint, mediumint, bigint ve int arasındaki fark nedir?
Hangi durumlarda bunlar kullanılmalıdır?
Yanıtlar:
Farklı miktarlarda yer kaplarlar ve farklı kabul edilebilir değer aralıklarına sahiptirler.
SQL Server için boyutlar ve değer aralıkları şunlardır , diğer RDBMS'ler benzer belgelere sahiptir:
Hepsi aynı spesifikasyonu kullandıkları ortaya çıktı (aşağıda belirtilen birkaç küçük istisna dışında), ancak bu türlerin çeşitli kombinasyonlarını destekliyor (Oracle sadece bir NUMBER
veri türüne sahip olduğu için dahil edilmedi , yukarıdaki bağlantıya bakın):
| SQL Server MySQL Postgres DB2
---------------------------------------------------
tinyint | X X
smallint | X X X X
mediumint | X
int/integer | X X X X
bigint | X X X X
Ve aynı değer aralıklarını (aşağıda bir istisna dışında) desteklerler ve hepsi aynı depolama gereksinimlerine sahiptir:
| Bytes Range (signed) Range (unsigned)
--------------------------------------------------------------------------------------------
tinyint | 1 byte -128 to 127 0 to 255
smallint | 2 bytes -32768 to 32767 0 to 65535
mediumint | 3 bytes -8388608 to 8388607 0 to 16777215
int/integer | 4 bytes -2147483648 to 2147483647 0 to 4294967295
bigint | 8 bytes -9223372036854775808 to 9223372036854775807 0 to 18446744073709551615
"İmzasız" türler yalnızca MySQL'de mevcuttur ve geri kalanı sadece bir istisna dışında imzalı aralıkları kullanır: tinyint
SQL Server'da imzasız ve 0 ila 255 arasında bir değer aralığı var
gereken depolama alanı boyutu ve sayıların ne kadar büyük olabileceği
SQL Server'da
tinyint 1 bayt, 0 ila 255
smallint 2 bayt, -2 ^ 15 (-32,768) ila 2 ^ 15-1 (32,767) arası
int 4 bayt, -2 ^ 31 (-2,147,483,648) ila 2 ^ 31-1 (2,147,483,647)
bigint 8 bayt, -2 ^ 63 (-9,223,372,036,854,775,808) ila 2 ^ 63-1 (9,223,372,036,854,775,807)
4 numarayı da 4'te saklayabilirsiniz, ancak bir bigint 8 bayt kullanır, bir tinyint 1 bayt kullanır
Bu veri türlerinin gerçek dünya kullanımı söz konusu olduğunda, belirli tamsayı türlerinin kullanılmasının sadece aşırıya kaçması veya az kullanılması gerektiğini anlamanız çok önemlidir. Örneğin, bir tablodaki workerCount için tamsayı veri türünün kullanılması, çalışanın ~ negatif 2 milyar ila pozitif 2 milyar veya sıfır ila yaklaşık 4 milyar (imzasız) arasında bir tamsayı değer aralığını desteklediğinden aşırı yük olabileceğini söylüyor. Bu nedenle, yaklaşık 2,2 milyon çalışanı olan ve çalışanCount sütunu için tamsayı veri türü kullanan Walmart gibi ABD'nin en büyük işverenlerinden birini düşünürseniz bile gereksiz olur. Böyle bir durumda, örneğin, orta düzey (0 ila 16 milyon (imzasız) desteği) kullanırsınız. Aralığınızın olağandışı büyük olması bekleniyorsa, Daniel'den görebileceğiniz gibi bigint'i düşünebilirsiniz.
Fark, her bir tamsayıya ayrılan bellek miktarı ve her birinin ne kadar büyük bir sayı depolayabileceğidir.
Veri türü Aralık Depolama
bigint -2^63 (-9,223,372,036,854,775,808) to 2^63-1 (9,223,372,036,854,775,807) 8 Bytes
int -2^31 (-2,147,483,648) to 2^31-1 (2,147,483,647) 4 Bytes
smallint -2^15 (-32,768) to 2^15-1 (32,767) 2 Bytes
tinyint 0 to 255 1 Byte
Misal
Aşağıdaki örnek, bigint, int, smallint ve tinyint veri türlerini kullanarak bir tablo oluşturur. Değerler her sütuna eklenir ve SELECT deyiminde döndürülür.
CREATE TABLE dbo.MyTable
(
MyBigIntColumn bigint
,MyIntColumn int
,MySmallIntColumn smallint
,MyTinyIntColumn tinyint
);
GO
INSERT INTO dbo.MyTable VALUES (9223372036854775807, 214483647,32767,255);
GO
SELECT MyBigIntColumn, MyIntColumn, MySmallIntColumn, MyTinyIntColumn
FROM dbo.MyTable;