Jawaban singkat: Tidak ada perbedaan praktis, kinerja, atau penyimpanan.
Jawaban panjang:
Pada dasarnya tidak ada perbedaan (dalam MySQL) antara VARCHAR(3000)
(atau batas besar lainnya) dan TEXT
. Yang pertama akan dipotong pada 3000 karakter ; yang terakhir akan dipotong pada 65535 byte . (Saya membuat perbedaan antara byte dan karakter karena karakter dapat mengambil banyak byte.)
Untuk batas yang lebih kecil VARCHAR
, ada beberapa kelebihan di atas TEXT
.
- "lebih kecil" berarti 191, 255, 512, 767, atau 3072, dll, tergantung pada versi, konteks, dan
CHARACTER SET
.
INDEXes
terbatas pada seberapa besar kolom dapat diindeks. (767 atau 3072 byte ; ini tergantung versi dan pengaturan)
- Tabel perantara yang dibuat oleh kompleks
SELECTs
ditangani dengan dua cara berbeda - MEMORY (lebih cepat) atau MyISAM (lebih lambat). Ketika kolom 'besar' terlibat, teknik yang lebih lambat akan dipilih secara otomatis. (Perubahan signifikan datang dalam versi 8.0; jadi butir ini dapat berubah.)
- Terkait dengan item sebelumnya, semua
TEXT
tipe data (sebagai lawan dari VARCHAR
) melompat langsung ke MyISAM. Artinya, TINYTEXT
secara otomatis lebih buruk untuk tabel temp yang dihasilkan daripada yang setara VARCHAR
. (Tapi ini membawa diskusi ke arah ketiga!)
VARBINARY
seperti VARCHAR
; BLOB
seperti TEXT
.
Bantahan terhadap jawaban lain
Pertanyaan asli menanyakan satu hal (tipe data mana yang digunakan); jawaban yang diterima menjawab hal lain (penyimpanan tidak direkam). Jawaban itu sudah ketinggalan zaman.
Ketika utas ini dimulai dan dijawab, hanya ada dua "format baris" di InnoDB. Segera setelah itu, dua format lagi ( DYNAMIC
dan COMPRESSED
) diperkenalkan.
Lokasi penyimpanan untuk TEXT
dan VARCHAR()
didasarkan pada ukuran , bukan pada nama tipe data . Untuk diskusi terbaru penyimpanan on / off-record kolom teks / gumpalan besar, lihat ini .