Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Perbedaan antara VARCHAR dan TEXT di MySQL

TL;DR

TEXT

  • ukuran maksimal tetap 65535 karakter (Anda tidak dapat membatasi ukuran maksimal)
  • membutuhkan 2 + c byte ruang disk, di mana c 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 (untuk M 255) atau 2 + c (untuk 256 M 65535) byte ruang disk tempat c 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 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Membuat Tampilan MySQL

  2. Bagaimana cara menyimpan alamat yang kompatibel dengan IPv6 dalam database relasional

  3. ScaleGrid DBaaS Memperluas Layanan Hosting MySQL Melalui AWS Cloud

  4. Menghubungkan ke MySQL dari Android dengan JDBC

  5. Cara Mendapatkan Data Minggu Ini di MySQL