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?

Mengomentari pertanyaan (1)
Larutan

TL;DR

TEKS

  • fixed max ukuran 65535 karakter (anda tidak dapat membatasi ukuran maksimal)
  • mengambil 2 + c bytes of disk space, di mana c adalah panjang dari string disimpan.
  • tidak bisa menjadi bagian dari indeks

VARCHAR(M)

  • variabel max ukuran M karakter
  • M harus antara 1 dan 65535
  • mengambil 1 + c bytes (untuk M ≤ 255) atau 2 + c (untuk 256 ≤ M ≤ 65535) bytes of disk space di mana c adalah panjang dari string disimpan
  • dapat menjadi bagian dari indeks

Rincian Lebih Lanjut

TEKS memiliki tetap ukuran maksimal dari 2¹⁶-1 = 65535 karakter. VARCHARmemiliki **variabel** max sizeM*up untuk*M = 2¹⁶-1. Jadi anda tidak dapat memilih ukuranTEKStetapi anda dapat untukVARCHAR`.

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.

Komentar (12)