Secondo i documenti MySQL , ci sono quattro tipi di TESTO:
- TINYTEXT
- TESTO
- MEDIUMTEXT
- LONGTEXT
Qual è la lunghezza massima che posso memorizzare in una colonna di ciascun tipo di dati supponendo che la codifica dei caratteri sia UTF-8?
Secondo i documenti MySQL , ci sono quattro tipi di TESTO:
Qual è la lunghezza massima che posso memorizzare in una colonna di ciascun tipo di dati supponendo che la codifica dei caratteri sia UTF-8?
Risposte:
Dalla documentazione :
Digita | 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
Nota che il numero di caratteri che possono essere memorizzati nella tua colonna dipenderà dalla codifica dei caratteri .
A TEXT column with a maximum length of 255 (28 – 1) characters. The effective maximum length is less if the value contains multi-byte characters.
vedi la risposta di Ankan per maggiori dettagli.
Espansione della stessa risposta
QUESTA È UNA TABELLA PREVENTIVA PER LE DECISIONI RAPIDE!
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 | 21,845 | 65,535 | 4,854.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
Fare riferimento anche alla risposta di Chris V: https://stackoverflow.com/a/35785869/1881812
TINYTEXT
conta 1 byte + 8 byte rispetto alla dimensione del record, mentre a VARCHAR(255)
conta da 1 byte + 255 byte fino a 2 byte + 1020 byte (4 byte UTF-8 caratteri) rispetto alla dimensione del record.
In vista della sfida di @ Ankan-Zerob, questa è la mia stima della lunghezza massima che può essere memorizzata in ciascun 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 (ad es. Norvig.com/mayzner.html ), sebbene la lunghezza delle parole varierà in base al dominio (ad es. Lingua parlata vs. documenti accademici), quindi non ha senso essere troppo precisi. L'inglese è per lo più caratteri ASCII a byte singolo, con caratteri multi-byte molto occasionali, quindi vicini a un byte per lettera. È necessario consentire un carattere aggiuntivo per gli spazi tra parole, quindi ho arrotondato per difetto da 5,8 byte per parola. Le lingue con molti accenti come il polacco memorizzano un numero leggermente inferiore di parole, come ad esempio il tedesco con parole più lunghe.
Le lingue che richiedono caratteri multi-byte come greco, arabo, ebraico, hindi, tailandese, ecc., In genere richiedono due byte per carattere in UTF-8. Indovinando selvaggiamente 5 lettere per parola, ho arrotondato per difetto da 11 byte per parola.
Script CJK (Hanzi, Kanji, Hiragana, Katakana, ecc.) Di cui non so nulla; Credo che i caratteri richiedano principalmente 3 byte in UTF-8 e (con enorme semplificazione) potrebbero essere considerati in grado di utilizzare circa 2 caratteri per parola, quindi si troverebbero in qualche punto tra gli altri due. (È probabile che gli script CJK richiedano meno spazio di archiviazione utilizzando UTF-16, a seconda).
Questo ovviamente ignora le spese generali di archiviazione, ecc.