@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)
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.
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.
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:
"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.
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
@ 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.
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
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).
mysql
sebelum kedatangan saya. ThxJawaban:
Suatu
INT
akan 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 karenaint(10)
masih akan ditampilkan sebagai 12345, tetapi Anda memiliki opsi untuk memasukkan lima digit pertama. Misalnya, jika Anda menambahkannyaZEROFILL
akan ditampilkan sebagai 0000012345.... dan nilai maksimumnya adalah 2147483647 (Ditandatangani) atau 4294967295 (Tidak Ditandatangani)
sumber
5001
akan ditampilkan5001
meskipun bidang didefinisikan sebagaiINT(3)
. Lihat jawaban @priyabagus di bawah dan di sini .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 in
INT(x)
jika nilai yang disimpan memiliki angka kurang dari x ,
ZEROFILL
akan menambah nol.jika nilai yang disimpan memiliki lebih banyak digit daripada x , itu akan ditampilkan apa adanya.
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.
sumber
ZEROFILL
.Menurut di sini ,
int(11)
akan mengambil 4 byte ruang yaitu 32 bit ruang dengan2^(31) = 2147483648
nilai maks dan-2147483648
nilai min. Satu bit untuk tanda.sumber
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:100
100
saat output (tidak0
atau00
)Satu-satunya hal yang
(2)
akan dilakukan adalah jika zerofill juga ditentukan :1
akan ditampilkan01
.Cara terbaik untuk melihat semua nuansa adalah menjalankan:
yang akan menghasilkan:
Jawaban ini diuji terhadap MySQL 5.7.12 untuk Linux dan mungkin atau mungkin tidak bervariasi untuk implementasi lainnya.
sumber
(11)
- atributint
tipe data ini tidak ada hubungannya dengan ukuran kolom. Ini hanya lebar layar dari tipe data integer. Dari 11.1.4.5. Atribut Tipe Numerik :sumber
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
sumber
Meskipun jawaban ini tidak mungkin terlihat, saya pikir klarifikasi berikut layak dibuat:
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
sumber
n
, jadi ... ya, itu omong kosong. Itu hanya melakukan apa saja dengan zerofill.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
sumber
menurut buku ini :
sumber
Saya pikir nilai maks int (11) adalah 4294967295
sumber
4294967295 adalah jawabannya, karena int (11) menunjukkan maksimum 11 digit IMO
sumber