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
?
TEKS
c
bytes of disk space, di mana c
adalah panjang dari string disimpan.VARCHAR(M)
M
karakterM
harus antara 1 dan 65535c
bytes (untuk M
≤ 255) atau 2 + c
(untuk 256 ≤ M
≤ 65535) bytes of disk space di mana c
adalah panjang dari string disimpanTEKS
memiliki tetap ukuran maksimal dari 2¹⁶-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 menggunakan VARCHAR
. Tapi perhatikan bahwa panjang indeks juga terbatas, jadi jika anda VARCHAR kolom
terlalu lama anda harus menggunakan hanya beberapa karakter pertama dari VARCHAR kolom
dalam indeks (Lihat dokumentasi untuk CREATE INDEX
).
Tapi anda juga ingin menggunakan VARCHAR
, jika anda tahu bahwa panjang maksimum yang mungkin string masukan hanya M
, misalnya nomor telepon atau nama atau sesuatu seperti ini. Kemudian anda dapat menggunakan VARCHAR(30)
bukan TINYTEXT
atau TEKS
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
atau LONGTEXT
, tapi hati-hati: MEDIUMTEXT
toko senar hingga 16 MB, LONGTEXT
hingga 4 GB. Jika anda menggunakan LONGTEXT
dan mendapatkan data melalui PHP (setidaknya jika anda menggunakan mysqli
tanpa store_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)
dan TINYTEXT
, itu selalu membutuhkan 5 byte (1 byte untuk menyimpan panjang dari string 1 byte untuk masing-masing karakter). Jika anda menyimpan teks yang sama dalam VARCHAR(2000)
atau TEKS
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
dan VARCHAR
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 seperti CHAR
. Anda dapat membaca lebih lanjut tentang ini di sini.