Saya ingin tahu apa ukuran maksimal adalah untuk MySQL VARCHAR jenis.
Saya membaca bahwa ukuran maksimal dibatasi oleh ukuran baris yang berjarak sekitar 65k. Saya mencoba setting lapangan untuk varchar(20000)
tetapi mengatakan bahwa's terlalu besar.
Aku bisa set ke varchar(10000)
. Apa yang sebenarnya max yang bisa saya set ke?
Perlu diingat bahwa MySQL memiliki ukuran maksimum baris membatasi
representasi internal dari sebuah tabel MySQL memiliki ukuran maksimum baris membatasi 65.535 byte, tidak menghitung BLOB dan jenis TEKS. BLOB dan TEXT kolom hanya berkontribusi 9 sampai 12 byte ke arah baris size limit karena isinya disimpan secara terpisah dari sisa-turut. Baca lebih lanjut tentang Batas pada Tabel Jumlah Kolom dan Baris Size.
Ukuran maksimum satu kolom dapat menempati, berbeda sebelum dan setelah MySQL 5.0.3
nilai-Nilai dalam VARCHAR kolom panjang variabel string. Panjang dapat ditentukan sebagai nilai dari 0 sampai 255 sebelum MySQL 5.0.3, dan 0 untuk 65,535 di 5.0.3 dan versi yang lebih baru. Efektif maksimum panjang VARCHAR dalam MySQL 5.0.3 dan kemudian tunduk pada ukuran maksimum baris (65.535 byte, yang dibagi di antara semua kolom) dan set karakter yang digunakan.
Namun, perhatikan bahwa batas lebih rendah jika anda menggunakan multi-byte set karakter seperti utf8 atau utf8mb4.
Gunakan TEKS
jenis inorder untuk mengatasi turut batas ukuran.
empat jenis TEKS yang TINYTEXT, TEKS, MEDIUMTEXT, dan LONGTEXT. Ini sesuai dengan empat GUMPALAN jenis dan memiliki maksimum yang sama panjang dan persyaratan penyimpanan.
Rincian lebih lanjut tentang BLOB dan Jenis TEKS
Bahkan lebih
Checkout lebih detail tentang Tipe Data Persyaratan Penyimpanan yang berkaitan dengan persyaratan penyimpanan untuk semua jenis data.
Sebagai per online docs, ada 64K baris batas dan anda dapat bekerja di luar row ukuran dengan menggunakan:
row length = 1
+ (sum of column lengths)
+ (number of NULL columns + delete_flag + 7)/8
+ (number of variable-length columns)
Yang anda butuhkan untuk menjaga dalam pikiran bahwa kolom panjang aren't satu-ke-satu pemetaan dari ukuran mereka. Misalnya, CHAR(10) CHARACTER SET utf8
membutuhkan tiga byte untuk masing-masing dari sepuluh karakter sejak pengkodean tertentu harus memperhitungkan tiga byte-per-karakter milik utf8
(yang's MySQL's utf8
encoding, bukan "nyata" UTF-8, yang dapat memiliki hingga empat byte).
Tapi, jika anda turut ukuran mendekati 64K, anda mungkin ingin memeriksa skema database anda. It's langka tabel yang perlu yang luas dalam benar mengatur (3NF) database - it's possible, hanya tidak sangat umum.
Jika anda ingin menggunakan lebih dari itu, anda dapat menggunakan GUMPALAN
atau TEKS
jenis. Ini tidak dihitung terhadap batas 64K baris (lain dari yang kecil administratif footprint) tetapi anda perlu menyadari masalah-masalah lain yang berasal dari penggunaan mereka, seperti tidak mampu untuk memilah menggunakan seluruh blok teks yang melebihi jumlah tertentu dari karakter (meskipun hal ini dapat dikonfigurasi ke atas), memaksa tabel sementara berada di disk bukan di memori, atau harus mengkonfigurasi klien dan server komunikasi buffer untuk menangani ukuran yang efisien.
Ukuran yang diperbolehkan adalah:
TINYTEXT 255 (+1 byte overhead)
TEXT 64K - 1 (+2 bytes overhead)
MEDIUMTEXT 16M - 1 (+3 bytes overhead)
LONGTEXT 4G - 1 (+4 bytes overhead)
Anda masih memiliki byte/karakter ketidakcocokan (sehingga MEDIUMTEXT utf8
kolom dapat menyimpan "hanya" sekitar setengah juta karakter, (16M-1)/3 = 5,592,405
) tapi itu masih sangat memperluas jangkauan anda.
max panjang varchar tunduk pada max ukuran baris di MySQL, yang 64KB (tidak termasuk Gumpalan):
VARCHAR(65535) Namun, perhatikan bahwa batas lebih rendah jika anda menggunakan multi-byte karakter set:
VARCHAR(21844) CHARACTER SET utf8
Dari dokumentasi MySQL:
efektif maksimum panjang VARCHAR dalam MySQL 5.0.3 dan kemudian tunduk pada ukuran maksimum baris (65.535 byte, yang dibagi di antara semua kolom) dan set karakter yang digunakan. Misalnya, karakter utf8 bisa memerlukan sampai tiga byte per karakter, jadi VARCHAR kolom yang menggunakan utf8 set karakter dapat dinyatakan menjadi maksimum 21,844 karakter.
Batas VARCHAR bervariasi tergantung pada charset digunakan. Menggunakan ASCII akan menggunakan 1 byte per karakter. Artinya anda bisa menyimpan 65,535 karakter. Menggunakan utf8 akan menggunakan 3 byte per karakter yang mengakibatkan batas karakter dari 21,844. TAPI jika anda menggunakan modern set karakter multibyte utf8mb4 yang harus anda gunakan! Mendukung emojis dan karakter khusus lainnya. Ini akan menggunakan 4 byte per karakter. Ini akan membatasi jumlah karakter per meja untuk 16,383. Perhatikan bahwa bidang-bidang lain seperti INT juga akan dihitung terhadap batas-batas ini.
Kesimpulan:
utf8 maksimum 21,844 karakter
utf8mb4 maksimum 16,383 karakter
anda juga dapat menggunakan MEDIUMBLOB/LONGBLOB atau MEDIUMTEXT/LONGTEXT
GUMPALAN ketik MySQL dapat menyimpan hingga 65,534 bytes, jika anda mencoba untuk menyimpan lebih banyak data MySQL akan memotong data. MEDIUMBLOB dapat menyimpan hingga 16,777,213 byte, dan LONGBLOB dapat menyimpan hingga 4,294,967,292 byte.
Sebelum Mysql versi 5.0.3 Varchar datatype dapat menyimpan 255 karakter, tapi dari 5.0.3 dapat menyimpan 65,535 karakter.
TETAPI memiliki batasan ukuran maksimum baris 65.535 byte. Itu berarti termasuk semua kolom tidak boleh lebih dari 65.535 byte.
Dalam kasus anda yang mungkin ketika anda mencoba untuk mengatur lebih dari 10000 hal ini melebihi lebih dari 65,535 dan mysql akan memberikan kesalahan.
Untuk informasi lebih lanjut: https://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html
blog dengan contoh: http://goo.gl/Hli6G3