Lunghezza massima per il testo di tipo MySQL


437

Sto creando un modulo per l'invio di messaggi privati ​​e voglio impostare il maxlengthvalore di un'area di testo adeguata alla lunghezza massima di un textcampo nella mia tabella del database MySQL. Quanti caratteri può memorizzare un campo di testo?

Se molto, sarei in grado di specificare la lunghezza nel campo del tipo di testo del database come farei con varchar?


5
Digitando 64k in un semplice campo di testo? doloroso ...
Marc B,

169
@Marc B Non sottovalutare mai la capacità di un utente di incollare grandi quantità di immondizia in un campo di messaggi di testo privato.
simontemplar,

5
Ed è per questo che dovresti limitare la capacità del campo di testo e convalidare sempre i tuoi input ...
jpangamarca,

Risposte:


750

Vedere per i numeri massimi: http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html

TINYBLOB, TINYTEXT       L + 1 bytes, where L < 2^8    (255 Bytes)
BLOB, TEXT               L + 2 bytes, where L < 2^16   (64 Kilobytes)
MEDIUMBLOB, MEDIUMTEXT   L + 3 bytes, where L < 2^24   (16 Megabytes)
LONGBLOB, LONGTEXT       L + 4 bytes, where L < 2^32   (4 Gigabytes)

L è il numero di byte nel campo di testo. Quindi il numero massimo di caratteri per il testo è 2 16 -1 (usando caratteri a byte singolo). Significa 65 535 caratteri (usando caratteri a byte singolo).

Codifica UTF-8 / MultiByte : utilizzando la codifica MultiByte ogni carattere può consumare più di 1 byte di spazio. Per UTF-8 il consumo di spazio è compreso tra 1 e 4 byte per carattere.


2
@ fyr- Ecco cosa significa L + 2 byte, dove L <2 ^ 16? Potresti definirlo un po 'di più? Altro saggio puoi dirmi quanti caratteri possiamo memorizzare nel campo di testo? Per favore ....
Bajrang

2
@JJ L è il numero di caratteri e il numero di caratteri deve essere inferiore a 2 alla potenza di 16. 2 ^ 16 = 65536. Quindi potresti inserire 65535 caratteri che consumano 65535 byte + 3 byte = 65 538 byte per intero campo riempito.
circa

9
Si noti che i limiti di dimensione sono in byte . Quindi, se si utilizzano caratteri multibyte, non si ottengono 2 ^ 16 caratteri in una colonna TEXT, si ottengono comunque molti caratteri che è possibile memorizzare in 2 ^ 16 byte.
Bill Karwin,

4
Cosa ha detto Bill Karwin. BYTES, NON PERSONAGGI. Un personaggio può usare 4 byte per memorizzare con la codifica data (come 💩 in UTF-8).
basic6

8
Nota che in MySQL utf8 consuma fino a 3 byte, utf8mb4 consuma fino a 4. riferimento
mpen

126

TINYTEXT: 256 byte
TESTO: 65.535 byte
MEDIUMTEXT: 16.777.215 byte
LONGTEXT: 4.294.967.295 byte


10
Penso che TINYTEXT dovrebbe essere 255 byte anziché 256 byte, secondo la risposta accettata?
cytsunny,

83
Type       | Approx. Length     | Exact Max. Length Allowed
-----------------------------------------------------------
TINYTEXT   | 256 Bytes          |           255 characters
TEXT       |  64 Kilobytes      |        65,535 characters
MEDIUMTEXT |  16 Megabytes      |    16,777,215 characters
LONGTEXT   |   4 Gigabytes      | 4,294,967,295 characters

Nota: se si utilizzano caratteri multibyte (come l'arabo, in cui ogni carattere arabo occupa 2 byte), la colonna "Lunghezza massima consentita esatta" TINYTEXTpuò contenere fino a 127 caratteri arabi (Nota: spazio, trattino, trattino basso e altri caratteri simili , sono caratteri a 1 byte).

Fondamentalmente, è come:

"Esatta lunghezza massima consentita" = "Lunghezza approssimativa" in byte - 1



8

Quanti caratteri può memorizzare un campo di testo?

Secondo la documentazione È possibile utilizzare un massimo di 21.844 caratteri se il set di caratteri è UTF8

Se molto, sarei in grado di specificare la lunghezza nel campo del tipo di testo db come farei con varchar?

Non è necessario specificare la lunghezza. Se hai bisogno di più caratteri, utilizza i tipi di dati MEDIUMTEXT o LONGTEXT. Con VARCHAR, la lunghezza specifica non è per i requisiti di archiviazione, ma solo per il modo in cui i dati vengono recuperati dalla base di dati.


8
TINYTEXT 256 bytes
TEXT 65,535 bytes ~64kb
MEDIUMTEXT 16,777,215 bytes ~16MB
LONGTEXT 4,294,967,295 bytes ~4GB

TINYTEXTè un tipo di dati stringa che può contenere fino a 255caratteri.

TEXTè un tipo di dati stringa che può contenere fino a 65,535caratteri. TEXTè comunemente usato per brevi articoli.

LONGTEXTè un tipo di dati stringa con una lunghezza massima di 4,294,967,295caratteri. Utilizzare LONGTEXTse è necessario memorizzare un testo di grandi dimensioni, ad esempio un capitolo di un romanzo.


1

TEXTè un tipo di dati stringa che può contenere fino a 65.535 caratteri. Tuttavia, se si desidera archiviare più dati, modificare il tipo di dati inLONGTEXT

ALTER TABLE name_tabelCHANGE text_fieldLONGTEXT CHARACTER SET utf8COLLATE utf8_general_ciNOT NULL;


1

Per la versione MySql 8.0.

Requisiti di archiviazione di tipo numerico

Data Type       Storage Required
TINYINT         1 byte
SMALLINT        2 bytes
MEDIUMINT       3 bytes
INT, INTEGER    4 bytes
BIGINT          8 bytes
FLOAT(p)        4 bytes if 0 <= p <= 24, 8 bytes if 25 <= p <= 53
FLOAT           4 bytes
DOUBLE, REAL    8 bytes
DECIMAL(M,D), NUMERIC(M,D)  Varies; see following discussion
BIT(M)  approximately (M+7)/8 bytes

I valori per le colonne DECIMAL (e NUMERIC) sono rappresentati utilizzando un formato binario che racchiude nove cifre decimali (base 10) in quattro byte. L'archiviazione per le parti intere e frazionarie di ciascun valore viene determinata separatamente. Ogni multiplo di nove cifre richiede quattro byte e le cifre "rimanenti" richiedono una frazione di quattro byte. La memoria richiesta per le cifre in eccesso è fornita dalla seguente tabella.

Requisiti di archiviazione del tipo di data e ora Per le colonne TIME, DATETIME e TIMESTAMP, l'archiviazione richiesta per le tabelle create prima di MySQL 5.6.4 differisce dalle tabelle create da 5.6.4 in poi. Ciò è dovuto a una modifica in 5.6.4 che consente a questi tipi di avere una parte frazionaria, che richiede da 0 a 3 byte.

Data Type   Storage Required Before MySQL 5.6.4   Storage Required as of MySQL 5.6.4
YEAR        1 byte                                1 byte
DATE        3 bytes                               3 bytes
TIME        3 bytes                               3 bytes + fractional seconds storage
DATETIME    8 bytes                               5 bytes + fractional seconds storage
TIMESTAMP   4 bytes                               4 bytes + fractional seconds storage

A partire da MySQL 5.6.4, lo spazio di archiviazione per ANNO e DATA rimane invariato. Tuttavia, TIME, DATETIME e TIMESTAMP sono rappresentati in modo diverso. DATETIME è impacchettato in modo più efficiente, richiedendo 5 anziché 8 byte per la parte non frazionaria e tutte e tre le parti hanno una parte frazionaria che richiede da 0 a 3 byte, a seconda della precisione frazionaria dei valori memorizzati.

Fractional Seconds Precision    Storage Required
0                               0 bytes
1, 2                            1 byte
3, 4                            2 bytes
5, 6                            3 bytes

Ad esempio, TIME (0), TIME (2), TIME (4) e TIME (6) utilizzano rispettivamente 3, 4, 5 e 6 byte. TIME e TIME (0) sono equivalenti e richiedono la stessa memoria.

Per dettagli sulla rappresentazione interna dei valori temporali, consultare MySQL Internals: Important Algorithms and Structures.

Requisiti di archiviazione del tipo di stringa Nella tabella seguente, M rappresenta la lunghezza della colonna dichiarata in caratteri per tipi di stringa non binari e byte per tipi di stringa binari. L rappresenta la lunghezza effettiva in byte di un determinato valore di stringa.

Data Type                    Storage Required
CHAR(M)                      The compact family of InnoDB row formats optimize storage for variable-length character sets. See COMPACT Row Format Characteristics. Otherwise, M × w bytes, <= M <= 255, where w is the number of bytes required for the maximum-length character in the character set.
BINARY(M)                    M bytes, 0 <= M <= 255
VARCHAR(M), VARBINARY(M)     L + 1 bytes if column values require 0  255 bytes, L + 2 bytes if values may require more than 255 bytes
TINYBLOB, TINYTEXT           L + 1 bytes, where L < 28
BLOB, TEXT                   L + 2 bytes, where L < 216
MEDIUMBLOB, MEDIUMTEXT       L + 3 bytes, where L < 224
LONGBLOB, LONGTEXT           L + 4 bytes, where L < 232
ENUM('value1','value2',...)  1 or 2 bytes, depending on the number of enumeration values (65,535 values maximum)
SET('value1','value2',...)   1, 2, 3, 4, or 8 bytes, depending on the number of set members (64 members maximum)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.