TL;DR
TEXT
- ukuran maksimal tetap 65535 karakter (Anda tidak dapat membatasi ukuran maksimal)
- membutuhkan 2 +
c
byte ruang disk, di manac
adalah panjang string yang disimpan. - tidak dapat (sepenuhnya) menjadi bagian dari indeks. Seseorang perlu menentukan panjang awalan.
VARCHAR(M)
- ukuran maksimal variabel
M
karakter M
harus antara 1 dan 65535- membutuhkan 1 +
c
byte (untukM
255) atau 2 +c
(untuk 256M
65535) byte ruang disk tempatc
adalah panjang string yang disimpan - bisa menjadi bagian dari indeks
Rincian Lebih Lanjut
TEXT
memiliki perbaikan ukuran maksimal 2¹⁶-1 = 65535
karakter.VARCHAR
memiliki variabel ukuran maksimal M
sampai M = 2¹⁶-1
.
Jadi Anda tidak dapat memilih ukuran TEXT
tapi Anda bisa untuk VARCHAR
.
Perbedaan lainnya adalah, Anda tidak dapat meletakkan indeks (kecuali indeks teks lengkap) pada TEXT
kolom.
Jadi jika Anda ingin memiliki indeks pada kolom, Anda harus menggunakan VARCHAR
. Tetapi perhatikan bahwa panjang indeks juga terbatas, jadi jika VARCHAR
. Anda kolom terlalu panjang Anda hanya perlu menggunakan beberapa karakter pertama dari VARCHAR
kolom di indeks Anda (Lihat dokumentasi untuk CREATE INDEX
).
Tetapi Anda juga ingin menggunakan VARCHAR
, jika Anda tahu bahwa panjang maksimum string input yang mungkin hanya M
, misalnya nomor telepon atau nama atau sesuatu seperti ini. Kemudian Anda dapat menggunakan VARCHAR(30)
bukannya TINYTEXT
atau TEXT
dan jika seseorang mencoba menyimpan teks dari ketiga buku "Lord of the Ring" di kolom nomor telepon Anda, Anda hanya menyimpan 30 karakter pertama :)
Sunting: Jika teks yang ingin Anda simpan dalam database lebih panjang dari 65535 karakter, Anda harus memilih MEDIUMTEXT
atau LONGTEXT
, tapi hati-hati:MEDIUMTEXT
menyimpan string hingga 16 MB, LONGTEXT
hingga 4GB. Jika Anda menggunakan LONGTEXT
dan dapatkan data melalui PHP (setidaknya jika Anda menggunakan mysqli
tanpa store_result
), Anda mungkin mendapatkan kesalahan alokasi memori, karena PHP mencoba mengalokasikan memori 4 GB untuk memastikan seluruh string dapat di-buffer. Ini mungkin juga terjadi dalam bahasa lain selain PHP.
Namun, Anda harus selalu periksa input (Apakah terlalu panjang? Apakah mengandung kode aneh?) sebelum menyimpannya dalam database.
Perhatikan:Untuk kedua jenis, ruang disk yang diperlukan hanya bergantung pada panjang string yang disimpan dan bukan pada panjang maksimum.
Misalnya jika Anda menggunakan charset latin1 dan menyimpan teks "Test" di VARCHAR(30)
, VARCHAR(100)
dan TINYTEXT
, selalu membutuhkan 5 byte (1 byte untuk menyimpan panjang string dan 1 byte untuk setiap karakter). Jika Anda menyimpan teks yang sama dalam VARCHAR(2000)
atau TEXT
kolom, itu juga akan membutuhkan ruang yang sama, tetapi, dalam hal ini, itu akan menjadi 6 byte (2 byte untuk menyimpan panjang string dan 1 byte untuk setiap karakter).
Untuk informasi lebih lanjut, lihat dokumentasi .
Terakhir, saya ingin menambahkan pemberitahuan, bahwa keduanya, TEXT
dan VARCHAR
adalah tipe data panjang variabel, sehingga kemungkinan besar meminimalkan ruang yang Anda perlukan untuk menyimpan data. Tapi ini datang dengan trade-off untuk kinerja. Jika Anda membutuhkan kinerja yang lebih baik, Anda harus menggunakan jenis panjang tetap seperti CHAR
. Anda dapat membaca lebih lanjut tentang ini di sini
.