Saya ingin tahu apa ukuran maksimal untuk tipe MySQL VARCHAR.
Saya membaca bahwa ukuran maks dibatasi oleh ukuran baris yaitu sekitar 65k. Saya mencoba mengatur bidang ke varchar(20000)
tetapi mengatakan bahwa itu terlalu besar.
Saya bisa mengaturnya varchar(10000)
. Apa tepatnya maks yang saya bisa atur?
Jawaban:
Perlu diingat bahwa MySQL memiliki batas ukuran baris maksimum
Ukuran maksimum yang dapat ditempati satu kolom, berbeda sebelum dan sesudah MySQL 5.0.3
Namun, perhatikan bahwa batasnya lebih rendah jika Anda menggunakan set karakter multi-byte seperti utf8 atau utf8mb4.
Gunakan
TEXT
jenis inorder untuk mengatasi batas ukuran baris.Lebih detail tentang Jenis BLOB dan TEKS
Bahkan lebih
Lihat detail lebih lanjut tentang Persyaratan Penyimpanan Tipe Data yang berkaitan dengan persyaratan penyimpanan untuk semua tipe data.
sumber
Sesuai dokumen online , ada batas baris 64 ribu dan Anda bisa menentukan ukuran baris dengan menggunakan:
Anda harus ingat bahwa panjang kolom bukan pemetaan satu-ke-satu dari ukurannya. Sebagai contoh,
CHAR(10) CHARACTER SET utf8
membutuhkan tiga byte untuk masing-masing dari sepuluh karakter karena pengkodean tertentu harus memperhitungkan properti tiga-byte-per-karakter dariutf8
(itu pengkodean MySQLutf8
daripada UTF-8 "nyata", yang dapat memiliki hingga empat byte ).Tetapi, jika ukuran baris Anda mendekati 64K, Anda mungkin ingin memeriksa skema database Anda. Ini adalah tabel langka yang perlu selebar itu dalam database yang diatur dengan benar (3NF) - itu mungkin, hanya saja tidak terlalu umum.
Jika Anda ingin menggunakan lebih dari itu, Anda dapat menggunakan
BLOB
atauTEXT
tipe . Ini tidak diperhitungkan terhadap batas baris 64K (selain jejak administratif kecil) tetapi Anda harus mengetahui masalah lain yang berasal dari penggunaannya, seperti tidak dapat mengurutkan menggunakan seluruh blok teks di luar angka tertentu karakter (meskipun ini dapat dikonfigurasi ke atas), memaksa tabel sementara berada di disk daripada di memori, atau harus mengkonfigurasi klien dan server comms buffer untuk menangani ukuran secara efisien.Ukuran yang diizinkan adalah:
Anda masih memiliki ketidakcocokan byte / karakter (sehingga
MEDIUMTEXT utf8
kolom dapat menyimpan "hanya" sekitar setengah juta karakter(16M-1)/3 = 5,592,405
) , tetapi masih sangat memperluas jangkauan Anda.sumber
utf8mb4
di MySQL .utf8mb4
adalah nama MySql untuk apa kata selebihnya disebut utf8.Sumber
sumber
CHARACTER SET utf8
dalam contoh. SeharusnyaCHARACTER SET utf8mb4
(jika Anda ingin semua teks Unicode disimpan dengan benar ... dan siapa yang tidak menginginkannya?)CHARSET=utf8mb4
penggunaanVARCHAR(16383)
.Dari dokumentasi MySQL:
Batas untuk VARCHAR bervariasi tergantung pada rangkaian karakter yang digunakan. Menggunakan ASCII akan menggunakan 1 byte per karakter. Berarti Anda bisa menyimpan 65.535 karakter. Menggunakan utf8 akan menggunakan 3 byte per karakter yang menghasilkan batas karakter 21.844. TETAPI jika Anda menggunakan utf8mb4 multibyte charset modern yang harus Anda gunakan! Ini mendukung emoji dan karakter khusus lainnya. Ini akan menggunakan 4 byte per karakter. Ini akan membatasi jumlah karakter per tabel menjadi 16.383. Perhatikan bahwa bidang lain seperti INT juga akan dihitung hingga batas ini.
Kesimpulan:
utf8 maksimum 21.844 karakter
utf8mb4 maksimum 16.383 karakter
sumber
Anda juga dapat menggunakan MEDIUMBLOB / LONGBLOB atau MEDIUMTEXT / LONGTEXT
Tipe BLOB di MySQL dapat menyimpan hingga 65.534 byte, jika Anda mencoba untuk menyimpan lebih dari data ini, MySQL akan memotong data. MEDIUMBLOB dapat menyimpan hingga 16.777.213 byte, dan LONGBLOB dapat menyimpan hingga 4.294.967.292 byte.
sumber
Sebelum Mysql versi 5.0.3 Varchar datatype dapat menyimpan 255 karakter, tetapi dari 5.0.3 dapat menyimpan 65.535 karakter.
TETAPI memiliki batasan ukuran baris maksimum 65.535 byte. Itu berarti termasuk semua kolom itu tidak boleh lebih dari 65.535 byte.
Dalam kasus Anda mungkin bahwa ketika Anda mencoba untuk mengatur lebih dari 10.000 itu 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
sumber
Anda dapat menggunakan
TEXT
tipe , yang tidak terbatas pada 64KB.sumber