Apa perbedaan antara tinyint, smallint, mediumint, bigint dan int di MySQL?

368

Apa perbedaan antara tinyint, smallint, mediumint, bigint dan int di MySQL?

Dalam kasus apa ini harus digunakan?

Sein Kraft
sumber

Jawaban:

575

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 NUMBERtipe 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: tinyintdi SQL Server unsigned dan memiliki rentang nilai 0 hingga 255

Daniel DiPaolo
sumber
21
Saya tidak tahu bahwa tipe-tipe yang tidak ditandatangani hanya tersedia di MySQL, ini merupakan keuntungan MySQL yang sangat besar dibandingkan RDBMS lainnya. Adakah yang berubah sejak hari jawaban ini diposting?
biox
3
@Aniel, Apa yang mereka pikirkan, mengapa ada satu untuk 3 byte tetapi tidak ada untuk 6 byte?
Pacerier
10
@ Peracerier mungkin mereka tidak tahu bagaimana menyebutkannya :))
Mihai Matei
5
Mereka seharusnya menyebut itu bigint dan bukannya bigint, sebuah humongousint.
MarioDS
5
Greatint bisa menjadi pilihan, karena Oracle adalah perusahaan AS. :)
osiris
32

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

SQLMenace
sumber
15

Itu tampaknya tipe data MySQL.

Menurut dokumentasi yang mereka ambil:

  1. tinyint = 1 byte
  2. smallint = 2 byte
  3. mediaint = 3 byte
  4. int = 4 byte
  5. bigint = 8 byte

Dan, tentu saja, menerima rentang angka yang semakin besar.

ANeves
sumber
9

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 '

Anil M
sumber
2
Dalam contoh WalMart Anda dengan karyawan aktif 2,2M - saya akan berpikir bahwa dengan pergantian staf sekitar 50% per tahun bahwa tipe INT pada EmployeeID akan menjadi minimum yang diperlukan. Bagaimana menurutmu? Diberikan - untuk perusahaan PALING normal, tipe INT akan menjadi WAY berlebihan!
kiltannen
3

Perbedaannya adalah jumlah memori yang dialokasikan untuk masing-masing integer, dan seberapa besar jumlah yang dapat mereka simpan masing-masing.

Alexsander Akers
sumber
2

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;
Vikram Rathaur
sumber