Berapa ukuran kolom int (11) di mysql dalam byte?

488

Berapa ukuran kolom int(11)dalam mysql dalam byte?

Dan Nilai maksimum yang dapat disimpan di kolom ini?

Gaurav
sumber
1
Kemungkinan duplikat Whats ukuran SQL Int (N)?
cellepo
1
@selepo satu adalah sql generik yang lain khusus untuk mysql (plus yang satu ini memiliki lebih banyak tampilan). Jika Anda ingin melakukan perburuan dupe dan minta saya segera menutupnya dalam satu suara, kunjungi obrolan SOBOTIK dan ping saya. Tapi yang harus ditutup harus ditandai mysqlsebelum kedatangan saya. Thx
Drew
6
Hai teman-teman. Ini mungkin duplikat, tetapi lebih ramah pencarian. Kebanyakan orang mencari seperti ini menggunakan int (11). dan itu memecahkan pertanyaan orang lain. Anda dapat memeriksa jumlah tampilan yang sebanding dengan yang lain. dan pengguna akan menemukan jawaban yang lebih terperinci di sini.
Gaurav

Jawaban:

685

Suatu INTakan selalu menjadi 4 byte tidak peduli berapa panjang yang ditentukan.

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

Panjangnya hanya menentukan berapa banyak karakter yang akan pad ketika memilih data dengan klien baris perintah mysql. 12345 yang disimpan sebagai int(3)masih akan ditampilkan sebagai 12345, tetapi jika disimpan karena int(10)masih akan ditampilkan sebagai 12345, tetapi Anda memiliki opsi untuk memasukkan lima digit pertama. Misalnya, jika Anda menambahkannya ZEROFILLakan ditampilkan sebagai 0000012345.

... dan nilai maksimumnya adalah 2147483647 (Ditandatangani) atau 4294967295 (Tidak Ditandatangani)

Matt MacLean
sumber
111
lalu apa arti dari 11 in int (11) di sini.
Gaurav
73
Kolom INT (4), bilangan bulat 1 hanya akan ditampilkan sebagai 0001 jika kolom juga ditentukan sebagai zerofill. Kalau tidak, itu hanya akan ditampilkan sebagai nomor 1, tanpa angka tambahan. @Gaurav - jangan gabungkan bagaimana mysql menampilkan data dan bagaimana menyimpannya, itu adalah dua hal yang berbeda. Apa yang Anda lihat bukan seperti apa sebenarnya.
Michael JV
13
@Michael Wow, sangat menarik. Jadi jika Anda membuat INT kolom (3) dan menyimpan nilai 5001, itu akan menyimpan 5001 tetapi hanya menampilkan 1. Saya tidak tahu itu.
andrewtweber
16
@andrewtweber: 5001akan ditampilkan 5001meskipun bidang didefinisikan sebagai INT(3). Lihat jawaban @priyabagus di bawah dan di sini .
go2null
10
Jika Anda tidak memberikan panjang untuk bidang bilangan bulat, MySQL akan menetapkan nilai default (tinyint 4, smallint 6, mediumint 9, int 11, bigint 20) Perlu dicatat bahwa panjang default ini cukup untuk menampilkan angka apa pun yang dapat disimpan dalam bidang ini (mis: nilai smallint max adalah 2 ^ 16 = 65536, 5 digit) Kecuali Anda memiliki alasan yang sangat baik untuk melakukan sebaliknya, saya akan menyarankan untuk meninggalkan ukuran default untuk menghindari kejutan buruk.
Thibault Witzig
167

INT ( x ) akan membuat perbedaan hanya dalam hal tampilan , yaitu untuk menunjukkan angka dalam x digit, dan tidak terbatas pada 11. Anda memasangkannya menggunakan ZEROFILL, yang akan menambahkan nol sampai cocok dengan panjang Anda.

Jadi, untuk sejumlah x inINT(x)

  • jika nilai yang disimpan memiliki angka kurang dari x , ZEROFILLakan menambah nol.

    INT (5) ZEROFILL dengan nilai tersimpan 32 akan menampilkan 00032
    INT (5) dengan nilai tersimpan 32 akan menunjukkan 32
    INT dengan nilai tersimpan 32 akan menunjukkan 32

  • jika nilai yang disimpan memiliki lebih banyak digit daripada x , itu akan ditampilkan apa adanya.

    INT (3) ZEROFILL dengan nilai tersimpan 250000 akan menampilkan 2.500
    INT (3) dengan nilai tersimpan 250000
    INT akan menunjukkan 250000 INT dengan nilai tersimpan 250000 akan menunjukkan 2.500

Nilai aktual yang disimpan dalam database tidak terpengaruh, ukurannya masih sama, dan setiap perhitungan akan berperilaku normal.

Ini juga berlaku untuk BIGINT, MEDIUMINT, SMALLINT, dan TINYINT.

priyabagus
sumber
49
Jadi panjangnya tidak ada artinya kecuali Anda menggunakan zerofill?
developerbmw
29
@developerbmw - Benar. Panjangnya tidak melakukan apa-apa kecuali Anda gunakan ZEROFILL.
Rick James
ZEROFILL pada dasarnya adalah mode kompatibilitas mainframe.
Henk Poley
114

Menurut di sini , int(11)akan mengambil 4 byte ruang yaitu 32 bit ruang dengan 2^(31) = 2147483648nilai maks dan -2147483648nilai min. Satu bit untuk tanda.

Santosh Linkha
sumber
1
Contoh Anda memiliki 9 sembilan. Bisakah Anda mengonfirmasi bahwa contoh Anda benar? Jika demikian, mengapa dikatakan 10 ketika ada 9 sembilan? Apakah jumlah digit ditambah satu ditambah karakter tanda?
Homer6
5
Tidak, angka maksimum adalah 4294967295 jika tidak ditandatangani, yaitu 2 ^ 32. Angka dalam kurung tidak memengaruhi tipe penyimpanan. Jika Anda membutuhkan lebih dari 2 ^ 32, Anda harus pergi ke bigint.
Kieran Tully
7
Atau lebih tepatnya, (2 ^ 32) -1.
Kieran Tully
2
+ Kieran benar. Jumlah maks berbeda dengan yang ada di jawaban. Lihat di sini
daviewales
38

Seperti yang dikatakan orang lain, nilai minumum / maksimum yang dapat disimpan oleh kolom dan berapa banyak penyimpanan yang diperlukan dalam byte hanya ditentukan oleh jenisnya, bukan panjangnya.

Banyak jawaban ini mengatakan bahwa (11)bagian tersebut hanya mempengaruhi lebar tampilan yang tidak sepenuhnya benar, tetapi kebanyakan.

Definisi int(2)dengan tidak ada ZEROFILL ditentukan akan:

  • masih menerima nilai 100
  • masih menampilkan nilai 100saat output (tidak 0atau 00)
  • yang lebar layar akan menjadi lebar terbesar keluaran nilai makhluk dari query pilih.

Satu-satunya hal yang (2)akan dilakukan adalah jika zerofill juga ditentukan :

  • nilai 1akan ditampilkan 01.
  • Saat menampilkan nilai, kolom akan selalu memiliki lebar dari nilai maksimum yang mungkin yang bisa diambil oleh kolom yaitu 10 digit untuk bilangan bulat, alih-alih lebar miniumum yang diperlukan untuk menampilkan nilai terbesar yang perlu ditampilkan kolom dalam kueri pemilihan spesifik tersebut , Yang bisa jauh lebih kecil.
  • Kolom masih dapat mengambil, dan menunjukkan nilai yang melebihi panjang, tetapi nilai-nilai ini tidak akan diawali dengan 0s.

Cara terbaik untuk melihat semua nuansa adalah menjalankan:

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;

yang akan menghasilkan:

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

Jawaban ini diuji terhadap MySQL 5.7.12 untuk Linux dan mungkin atau mungkin tidak bervariasi untuk implementasi lainnya.

Programster
sumber
5
"Perhatikan bagaimana kolom int1 memiliki lebar tampilan yang jauh lebih kecil daripada zerofill2 meskipun panjangnya lebih besar" ... Ehm, itu hanya karena nama kolom 'zerofill2' panjangnya 9 karakter vs 'int1' adalah 4.
neokio
2
... ya, jadi jelas panjangnya tidak berpengaruh, bahkan pada lebar layar saat zerofill tidak diaktifkan. Kalau tidak, int1 akan jauh lebih luas dengan lebar 10 karakter saja.
Programster
2
Penjelasan yang bagus dengan contoh yang solid. Jawaban yang jauh lebih baik daripada jawaban yang diterima. @Programster terima kasih.
Corin
Nit kecil: Seperti yang ditunjukkan neokio, tidak dapat mengamati dari kueri ini konsekuensi yang tepat dari "int (3)" dengan nol isi. Persingkat nama kolom menjadi "zf2", untuk membuat perilaku lebih jelas. Khususnya, apakah benar atau salah [pada versi DB yang diberikan] bahwa "(dengan zerofill) Saat menampilkan nilai, kolom akan selalu memiliki lebar dari nilai maksimum yang mungkin kolom dapat ambil yaitu 10 digit untuk integer,"
ToolmakerSteve
1
Untuk memperjelas komentar neokio dan komentar minor nit saya: Kalimat "Perhatikan bagaimana kolom int1 memiliki lebar tampilan yang jauh lebih kecil daripada zerofill2 meskipun panjangnya lebih besar." harus dihapus dari jawabannya. Itu adalah konsekuensi dari jumlah karakter di kata header "zerofill2" - tidak ada hubungannya dengan pengujian lebar tampilan. Lebih baik memberi kolom nama yang lebih pendek, misalnya "zf2". Maka kita akan memiliki tabel di mana "int1, int2, dan zf2 semuanya persis sama lebar, meskipun int2 dan zf2 menentukan lebar kecil (3)".
ToolmakerSteve
32

Berapa ukuran kolom int (11) di mysql dalam byte?

(11)- atribut inttipe data ini tidak ada hubungannya dengan ukuran kolom. Ini hanya lebar layar dari tipe data integer. Dari 11.1.4.5. Atribut Tipe Numerik :

MySQL mendukung ekstensi untuk secara spesifik menentukan lebar tampilan tipe data integer dalam tanda kurung mengikuti kata kunci dasar untuk tipe tersebut. Misalnya, INT (4) menetapkan INT dengan lebar tampilan empat digit.

ks1322
sumber
19

Penjelasan yang baik untuk ini dapat ditemukan di sini

Untuk meringkas: Angka N dalam int (N) sering bingung dengan ukuran maksimum yang diperbolehkan untuk kolom, seperti halnya dalam kasus varchar (N).

Tapi ini tidak terjadi dengan tipe data Integer - angka N dalam tanda kurung bukan ukuran maksimum untuk kolom, tetapi hanya parameter untuk memberitahu MySQL berapa lebar untuk menampilkan kolom pada saat data tabel dilihat melalui MySQL konsol (saat Anda menggunakan atribut ZEROFILL).

Angka dalam tanda kurung akan memberi tahu MySQL berapa banyak nol untuk pad integer masuk. Misalnya: Jika Anda menggunakan ZEROFILL pada kolom yang diatur ke INT (5) dan angka 78 dimasukkan, MySQL akan memasukkan nilainya dengan nol sampai angka tersebut memenuhi angka dalam tanda kurung. yaitu 78 akan menjadi 00078 dan 127 akan menjadi 00127. Singkatnya: Jumlah dalam tanda kurung digunakan untuk tujuan tampilan.
Di satu sisi, angka dalam kurung agak tidak berguna kecuali Anda menggunakan atribut ZEROFILL.

Jadi ukuran untuk int akan tetap sama yaitu, -2147483648 hingga 2147483648 untuk ditandatangani dan 0 hingga 4294967295 untuk yang tidak ditandatangani(~ 2,15 miliar dan 4,2 miliar, yang merupakan salah satu alasan mengapa pengembang tetap tidak mengetahui cerita di balik Angka N dalam tanda kurung, karena hampir tidak mempengaruhi database kecuali jika berisi lebih dari 2 miliar baris), dan dalam hal byte akan menjadi 4 byte .

Untuk informasi lebih lanjut tentang ukuran / rentang Jenis Integer, lihat Manual MySQL

shashi009
sumber
Mengapa jumlah baris ikut bermain di sini?
Pak Tua
@ OldGeezer - setuju, "jumlah baris" tidak relevan untuk sebagian besar kolom. Hanya relevan untuk kolom penambahan kunci primer (id).
ToolmakerSteve
10

Meskipun jawaban ini tidak mungkin terlihat, saya pikir klarifikasi berikut layak dibuat:

  • (n) di belakang tipe data integer di MySQL menentukan lebar tampilan
  • lebar tampilan TIDAK membatasi panjang angka yang dikembalikan dari kueri
  • lebar tampilan TIDAK membatasi jumlah nol yang diisi untuk kolom yang diisi nol sehingga jumlah total cocok dengan lebar tampilan (asalkan angka aktual tidak melebihi lebar tampilan, dalam hal ini angka ditampilkan seperti apa adanya)
  • lebar layar juga dimaksudkan sebagai alat yang berguna bagi pengembang untuk mengetahui berapa panjang nilai yang harus diisi

SEBUAH RINCIAN Detail
lebar layar, tampaknya, dimaksudkan untuk memberikan beberapa metadata tentang berapa banyak nol untuk ditampilkan dalam angka yang diisi nol.
Ini TIDAK benar-benar membatasi panjang angka yang dikembalikan dari kueri jika angka itu melampaui lebar tampilan yang ditentukan.
Untuk mengetahui panjang / lebar sebenarnya yang diizinkan untuk tipe data integer di MySQL, lihat daftar & tautan: ( jenis: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT );
Jadi dengan mengatakan hal di atas, Anda dapat mengharapkan lebar tampilan tidak mempengaruhi hasil dari kueri standar, kecuali kolom ditentukan sebagai kolom ZEROFILL
ATAU
dalam hal data ditarik ke dalam suatu aplikasi & aplikasi tersebut sedang mengumpulkan lebar tampilan untuk digunakan untuk beberapa jenis padding lainnya.

Referensi Utama: https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean

MER
sumber
Terima kasih telah memberikan jawaban yang tepat. Saya mencoba dari baris perintah MySQL, dan saya tidak bisa mendapatkannya dengan sedikit n, jadi ... ya, itu omong kosong. Itu hanya melakukan apa saja dengan zerofill.
buka
@membuka saya bisa membantu, ini terkait dengan sesuatu yang saya coba dan pikir saya bisa memasukkan lebih banyak detail di sini yang mungkin berguna untuk orang lain.
MER
9

Dalam MySQL integer int(11)memiliki ukuran 4 byte yang sama dengan 32 bit.

Nilai yang ditandatangani adalah: - 2^(32-1) to 0 to 2^(32-1)-1 = -2147483648 to 0 to 2147483647

Nilai yang tidak ditandatangani adalah: 0 to 2^32-1 = 0 to 4294967295

Sachin Agrawal
sumber
0

menurut buku ini :

MySQL memungkinkan Anda menentukan "lebar" untuk tipe integer, seperti INT (11). Ini tidak berarti untuk sebagian besar aplikasi: ini tidak membatasi rentang nilai hukum, tetapi hanya menentukan jumlah karakter yang akan disediakan oleh alat interaktif MySQL untuk tujuan tampilan. Untuk tujuan penyimpanan dan komputasi, INT (1) identik dengan INT (20).

Alireza Rahmani Khalili
sumber
-4

Saya pikir nilai maks int (11) adalah 4294967295

Samuel
sumber
2
Ini 2147483647 karena memiliki tanda.
d3bit
-9

4294967295 adalah jawabannya, karena int (11) menunjukkan maksimum 11 digit IMO

Dudee
sumber