pengembangan-web-mp.com

Ukuran penyimpanan maksimum TINYTEXT, TEXT, MEDIUMTEXT, dan LONGTEXT

Per dokumen MySQL , ada empat jenis TEKS:

  1. TINYTEXT
  2. TEKS
  3. MEDIUMTEXT
  4. PANJANG

Berapa panjang maksimum yang bisa saya simpan di kolom setiap tipe data dengan asumsi pengkodean karakter adalah UTF-8?

698
Lalith B

Dari dokumentasi :

 Ketik | Panjang maksimum 
 ----------- + ------------------------------- ------ 
 TINYTEXT | 255 (2  8−1) byte 
 TEXT | 65.535 (216−1) byte = 64 KiB 
 MEDIUMTEXT | 16.777.215 (224−1) byte = 16 MiB 
 LONGTEXT | 4.294.967.295 (232−1) byte = 4 GiB 

Perhatikan bahwa jumlah karakter yang dapat disimpan di kolom Anda akan bergantung pada pengkodean karakter .

1387
Bridge

Perluasan jawaban yang sama

  1. Ini SO posting: varchar (255) vs tinytext/tinyblob dan varchar (65535) vs blob/text menguraikan secara rinci overhead dan mekanisme penyimpanan.
  2. Seperti disebutkan dari poin (1), VARCHAR harus selalu digunakan sebagai ganti TINYTEXT. Namun saat menggunakan VARCHAR, ukuran maksimum baris tidak boleh melebihi 65535 byte.
  3. Seperti diuraikan di sini http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-utf8.html , maks 3 byte untuk utf-8.

INI IS PERKIRAAN ESTIMASI KASAR UNTUK KEPUTUSAN CEPAT!

  1. Jadi asumsi kasus terburuk (3 byte per utf-8 char) untuk kasus terbaik (1 byte per utf-8 char)
  2. Dengan asumsi bahasa inggris memiliki rata-rata 4,5 huruf per kata
  3. x adalah jumlah byte yang dialokasikan

x-x

      Type | A= worst case (x/3) | B = best case (x) | words estimate (A/4.5) - (B/4.5)
-----------+---------------------------------------------------------------------------
  TINYTEXT |              85     | 255               | 18 - 56
      TEXT |           21845     | 65,535            | 4854.44 - 14,563.33  
MEDIUMTEXT |       5,592,415     | 16,777,215        | 1,242,758.8 - 3,728,270
  LONGTEXT |   1,431,655,765     | 4,294,967,295     | 318,145,725.5 - 954,437,176.6

Silakan merujuk ke jawaban Chris V juga: https://stackoverflow.com/a/35785869/1881812

221
Ankan-Zerob

Naik ke tantangan @ Ankan-Zerob, ini adalah perkiraan panjang maksimum saya yang dapat disimpan di setiap jenis teks diukur dalam kata-kata :

      Type |         Bytes | English words | Multi-byte words
-----------+---------------+---------------+-----------------
  TINYTEXT |           255 |           ±44 |              ±23
      TEXT |        65,535 |       ±11,000 |           ±5,900
MEDIUMTEXT |    16,777,215 |    ±2,800,000 |       ±1,500,000
  LONGTEXT | 4,294,967,295 |  ±740,000,000 |     ±380,000,000

Dalam Bahasa Inggris , 4,8 huruf per Kata mungkin rata-rata yang baik (misalnya norvig.com/mayzner.html ), meskipun panjang kata akan bervariasi sesuai dengan domain (misalnya bahasa lisan vs makalah akademik) , jadi tidak ada gunanya terlalu tepat. Bahasa Inggris kebanyakan single-byte ASCII karakter, dengan karakter multi-byte yang sangat sesekali, sangat dekat dengan satu byte per huruf. Karakter tambahan harus diizinkan untuk ruang antar-kata, jadi saya telah dibulatkan dari 5,8 byte per kata. Bahasa dengan banyak aksen seperti katakana Polandia akan menyimpan kata-kata yang sedikit lebih sedikit, seperti mis. Jerman dengan kata-kata yang lebih panjang.

Bahasa yang membutuhkan multi-byte karakter seperti Yunani, Arab, Ibrani, Hindi, Thailand, dll, dll biasanya memerlukan dua byte per karakter dalam UTF-8. Tebak liar di 5 huruf per kata, saya sudah dibulatkan dari 11 byte per kata.

Skrip CJK (Hanzi, Kanji, Hiragana, Katakana, dll) Saya tidak tahu apa-apa tentang; Saya percaya sebagian besar karakter memerlukan 3 byte di UTF-8, dan (dengan penyederhanaan besar-besaran) mereka mungkin dianggap menggunakan sekitar 2 karakter per kata, sehingga mereka akan berada di antara dua karakter lainnya. (Skrip CJK cenderung membutuhkan lebih sedikit penyimpanan menggunakan UTF-16, tergantung).

Ini tentu saja mengabaikan biaya penyimpanan dll.

36
ChrisV

Ini bagus tapi tidak menjawab pertanyaan:

"VARCHAR harus selalu digunakan, bukan TINYTEXT." Tinytext berguna jika Anda memiliki baris lebar - karena data disimpan tidak direkam. Ada overhead kinerja, tetapi memang ada gunanya.

6
colin0117