Perbedaan antara VARCHAR dan TEXT di mysql
Ketika kita membuat sebuah tabel di mysql dengan VARCHAR kolom
, kita harus mengatur panjang untuk itu. Tapi untuk jenis TEXT
kita don't harus memberikan panjang.
Apa perbedaan antara VARCHAR
dan TEKS
?
258
1
TL;DR
TEKS
c
bytes of disk space, di manac
adalah panjang dari string disimpan.VARCHAR(M)
M
karakterM
harus antara 1 dan 65535c
bytes (untukM
≤ 255) atau 2 +c
(untuk 256 ≤M
≤ 65535) bytes of disk space di manac
adalah panjang dari string disimpanRincian Lebih Lanjut
TEKS
memiliki tetap ukuran maksimal dari2¹⁶-1 = 65535 karakter.
VARCHARmemiliki **variabel** max size
M*up untuk*
M = 2¹⁶-1. Jadi anda tidak dapat memilih ukuran
TEKStetapi anda dapat untuk
VARCHAR`.Perbedaan lainnya adalah, bahwa anda tidak dapat menempatkan indeks (kecuali untuk fulltext indeks) pada
TEKS
kolom. Jadi jika anda ingin memiliki indeks pada kolom, anda harus menggunakanVARCHAR
. Tapi perhatikan bahwa panjang indeks juga terbatas, jadi jika andaVARCHAR kolom
terlalu lama anda harus menggunakan hanya beberapa karakter pertama dariVARCHAR kolom
dalam indeks (Lihat dokumentasi untukCREATE INDEX
).Tapi anda juga ingin menggunakan
VARCHAR
, jika anda tahu bahwa panjang maksimum yang mungkin string masukan hanyaM
, misalnya nomor telepon atau nama atau sesuatu seperti ini. Kemudian anda dapat menggunakanVARCHAR(30)
bukanTINYTEXT
atauTEKS
dan jika seseorang mencoba untuk menyimpan teks dari semua tiga "Lord of the Ring" buku-buku di ponsel nomor kolom anda hanya toko pertama 30 karakter :)Edit: Jika teks yang ingin anda simpan di database lebih dari 65535 karakter, anda harus memilih
MEDIUMTEXT
atauLONGTEXT
, tapi hati-hati:MEDIUMTEXT
toko senar hingga 16 MB,LONGTEXT
hingga 4 GB. Jika anda menggunakanLONGTEXT
dan mendapatkan data melalui PHP (setidaknya jika anda menggunakanmysqli
tanpastore_result
), anda mungkin mendapatkan kesalahan alokasi memori, karena PHP mencoba untuk mengalokasikan 4 GB memori untuk memastikan seluruh string yang dapat buffered. Ini mungkin juga terjadi dalam bahasa lain selain bahasa PHP.Namun, anda harus selalu memeriksa input (itu terlalu lama? Tidak mengandung kode aneh?) sebelum menyimpannya dalam database.
Pemberitahuan: Untuk kedua jenis, diperlukan ruang disk yang hanya bergantung pada panjang dari string dan disimpan bukan pada panjang maksimal. E. g. jika anda menggunakan charset latin1 dan menyimpan text "Test" di
VARCHAR(30)
,VARCHAR(100)
danTINYTEXT
, itu selalu membutuhkan 5 byte (1 byte untuk menyimpan panjang dari string 1 byte untuk masing-masing karakter). Jika anda menyimpan teks yang sama dalamVARCHAR(2000)
atauTEKS
kolom, hal ini juga akan memerlukan ruang yang sama, tapi, dalam kasus ini, itu akan menjadi 6 byte (2 byte untuk menyimpan string yang panjang dan 1 byte untuk masing-masing karakter).Untuk informasi lebih lanjut silahkan lihat di dokumentasi.
Akhirnya, saya ingin menambahkan pemberitahuan, yang kedua,
TEKS
danVARCHAR
yang panjang variabel tipe data, dan sehingga mereka kemungkinan besar akan memperkecil ruang yang anda butuhkan untuk menyimpan data. Tapi ini datang dengan trade-off untuk kinerja. Jika anda membutuhkan kinerja yang lebih baik, anda harus menggunakan fixed panjang jenis sepertiCHAR
. Anda dapat membaca lebih lanjut tentang ini di sini.