Apa perbedaan antara tinyint, smallint, mediumint, bigint dan int di MySQL?
Dalam kasus apa ini harus digunakan?
Apa perbedaan antara tinyint, smallint, mediumint, bigint dan int di MySQL?
Dalam kasus apa ini harus digunakan?
Jawaban:
Mereka mengambil jumlah ruang yang berbeda dan mereka memiliki rentang nilai yang dapat diterima yang berbeda.
Berikut adalah ukuran dan rentang nilai untuk SQL Server , RDBMS lainnya memiliki dokumentasi yang serupa:
Ternyata mereka semua menggunakan spesifikasi yang sama (dengan beberapa pengecualian kecil yang disebutkan di bawah) tetapi mendukung berbagai kombinasi dari tipe-tipe tersebut (Oracle tidak termasuk karena hanya memiliki NUMBER
tipe data, lihat tautan di atas):
| 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
Dan mereka mendukung rentang nilai yang sama (dengan satu pengecualian di bawah) dan semua memiliki persyaratan penyimpanan yang sama:
| 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
Jenis "unsigned" hanya tersedia di MySQL, dan sisanya hanya menggunakan rentang yang ditandatangani, dengan satu pengecualian penting: tinyint
di SQL Server unsigned dan memiliki rentang nilai 0 hingga 255
ukuran penyimpanan yang dibutuhkan dan seberapa besar jumlahnya
pada SQL Server
tinyint 1 byte, 0 hingga 255
smallint 2 byte, -2 ^ 15 (-32.768) hingga 2 ^ 15-1 (32.767)
int 4 byte, -2 ^ 31 (-2147.483.648) hingga 2 ^ 31-1 (2.147.483.647)
bigint 8 byte, -2 ^ 63 (-9.223.372.036.854.775.808) menjadi 2 ^ 63-1 (9.222.372.036.854.775.807)
Anda dapat menyimpan nomor 1 di semua 4, tetapi bigint akan menggunakan 8 byte sementara tinyint akan menggunakan 1 byte
Itu tampaknya tipe data MySQL.
Menurut dokumentasi yang mereka ambil:
Dan, tentu saja, menerima rentang angka yang semakin besar.
Ketika sampai pada penggunaan dunia nyata dari tipe-tipe data ini, sangat penting bagi Anda untuk memahami bahwa menggunakan tipe integer tertentu bisa saja merupakan kerja keras atau kurang digunakan. Sebagai contoh, menggunakan tipe data integer untuk employeeCount dalam sebuah tabel mengatakan karyawan dapat menjadi berlebihan karena mendukung berbagai nilai integer dari ~ negatif 2 miliar hingga positif 2 miliar atau nol hingga sekitar 4 miliar (tidak ditandatangani). Jadi, bahkan jika Anda mempertimbangkan salah satu perusahaan terbesar di AS seperti Walmart dengan sekitar 2,2 juta karyawan menggunakan tipe data integer untuk kolom jumlah karyawan tidak akan diperlukan. Dalam kasus seperti itu, Anda menggunakan mediumint (yang mendukung 0 hingga 16 juta (tidak ditandatangani)) misalnya. Setelah mengatakan bahwa jika rentang Anda diharapkan luar biasa besar, Anda mungkin mempertimbangkan bigint yang seperti yang Anda lihat dari Daniel '
Perbedaannya adalah jumlah memori yang dialokasikan untuk masing-masing integer, dan seberapa besar jumlah yang dapat mereka simpan masing-masing.
Tipe data Rentang Penyimpanan
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
Contoh
Contoh berikut membuat tabel menggunakan tipe data bigint, int, smallint, dan tinyint. Nilai dimasukkan ke dalam setiap kolom dan dikembalikan dalam pernyataan SELECT.
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;