TINYTEXT, TEXT, MEDIUMTEXT e LONGTEXT dimensioni di archiviazione massime

Per i documenti MySQL , ci sono quattro tipi di TESTO:

  1. TINYTEXT
  2. TESTO
  3. MEDIUMTEXT
  4. LONGTEXT

Qual è la lunghezza massima che posso memorizzare in una colonna di ciascun tipo di dati assumendo che la codifica dei caratteri sia UTF-8?

Dalla documentazione :

       Tipo |  Lunghezza massima
 ----------- + -------------------------------------
   TINYTEXT |  255 (2 8 -1) byte
       TESTO |  65.535 (2 16 -1) byte = 64 KiB
 MEDIUMTEXT |  16.777.215 (2 24 -1) byte = 16 MiB
   LONGTEXT |  4.294.967.295 (2 32 -1) byte = 4 GiB

Si noti che il numero di caratteri che possono essere memorizzati nella colonna dipenderà dalla codifica dei caratteri .

Espansione della stessa risposta

  1. Questo post SO: varchar (255) vs tinytext / tinyblob e varchar (65535) vs blob / testo delinea in dettaglio i costi generali ei meccanismi di archiviazione.
  2. Come notato dal punto (1), dovrebbe essere sempre usato un VARCHAR al posto di TINYTEXT. Tuttavia, quando si utilizza VARCHAR, il numero massimo di righe non dovrebbe superare i 65535 byte.
  3. Come descritto qui http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-utf8.html , max 3 byte per utf-8.

QUESTA E ‘UNA TAVOLA DI STIMA PER LE DECISIONI RAPIDE!

  1. Quindi le ipotesi del caso peggiore (3 byte per utf-8 caratteri) nel migliore dei casi (1 byte per utf-8 caratteri)
  2. Supponendo che la lingua inglese abbia una media di 4,5 lettere per parola
  3. x è il numero di byte assegnati

xx

  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 

Si prega di fare riferimento anche alla risposta di Chris V: https://stackoverflow.com/a/35785869/1881812

Risalendo alla sfida di @ Ankan-Zerob, questa è la mia stima della lunghezza massima che può essere memorizzata in ogni tipo di testo misurato in parole :

  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 

In inglese , 4,8 lettere per parola sono probabilmente una buona media (es. Norvig.com/mayzner.html ), anche se le lunghezze delle parole variano a seconda del dominio (ad esempio, la lingua parlata rispetto ai documenti accademici), quindi non c’è motivo di essere troppo precisi. L’inglese è per lo più caratteri ASCII a singolo byte, con caratteri multi-byte molto occasionali, quindi vicino a un byte per lettera. Un carattere extra deve essere consentito per spazi tra parole, quindi ho arrotondato per difetto da 5,8 byte a parola. Lingue con molti accenti come dire che il polacco memorizzerebbe un numero leggermente inferiore di parole, come per esempio il tedesco con parole più lunghe.

Le lingue che richiedono caratteri multibyte come greco, arabo, ebraico, hindi, thai, ecc., In genere richiedono due byte per carattere in UTF-8. Indovinando selvaggiamente a 5 lettere per parola, ho arrotondato per difetto da 11 byte a parola.

Gli script CJK (Hanzi, Kanji, Hiragana, Katakana, ecc.) Non ne so nulla; Credo che i personaggi richiedano per lo più 3 byte in UTF-8, e (con una massiva semplificazione) potrebbero essere considerati per usare circa 2 caratteri per parola, quindi dovrebbero essere da qualche parte tra gli altri due. (È probabile che gli script CJK richiedano meno spazio di archiviazione utilizzando UTF-16, a seconda del caso).

Ovviamente si tratta di ignorare i costi generali di archiviazione, ecc.

Questo è bello ma non risponde alla domanda:

“Un VARCHAR dovrebbe sempre essere usato al posto di TINYTEXT.” Tinytext è utile se hai file larghe, dato che i dati vengono archiviati fuori dal record. C’è un sovraccarico di prestazioni, ma ha un uso.