Максимальная длина для текста типа MySQL

437

Я создаю форму для отправки личных сообщений и хочу установить maxlengthзначение текстовой области, соответствующее максимальной длине textполя в моей таблице базы данных MySQL. Сколько символов может хранить текстовое поле типа?

Если много, смогу ли я указать длину в поле типа текста базы данных, как я бы с varchar?

CyberJunkie
источник
5
Ввести 64 КБ в простое текстовое поле? больно ...
Марк Б,
169
@Marc B Никогда не стоит недооценивать способность пользователя вставлять огромное количество мусора в поле частного текстового сообщения.
simontemplar
5
И именно поэтому вы должны ограничить емкость текстового поля и всегда проверять свои входные данные ...
jpangamarca

Ответы:

750

См. Максимальное количество: 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 - количество байтов в вашем текстовом поле. Таким образом, максимальное количество символов для текста составляет 2 16 -1 (с использованием однобайтовых символов). Означает 65 535 символов (с использованием однобайтовых символов).

Кодировка UTF-8 / MultiByte : при использовании кодирования MultiByte каждый символ может занимать более 1 байта пространства. Для UTF-8 потребление пространства составляет от 1 до 4 байтов на символ.

БЮР
источник
2
@ fyr- Вот что значит для L + 2 байта, где L <2 ^ 16? Не могли бы вы определить это немного больше? В противном случае вы можете сказать мне, сколько символов мы можем хранить в текстовом поле? Пожалуйста ....
Баджранг
2
@JJ L - это число символов, и число символов должно быть меньше 2 для степени 16. 2 ^ 16 = 65536. Таким образом, вы можете ввести 65535 символов, которые потребляют 65535 байт + 3 байта = 65 538 байт на полный заполненное поле.
БЮР
9
Обратите внимание, что ограничения по размеру указаны в байтах . Поэтому, если вы используете многобайтовые символы, вы не получите 2 ^ 16 символов в столбце TEXT, вы получите столько символов, сколько сможете сохранить в 2 ^ 16 байтов.
Билл Карвин
4
Что сказал Билл Карвин БАЙТЫ, НЕ ХАРАКТЕРЫ. Символ может использовать 4 байта для хранения с заданной кодировкой (как 💩 в UTF-8).
basic6
8
Обратите внимание, что в MySQL utf8 потребляет до 3 байтов, utf8mb4 потребляет до 4. ссылка
mpen
126

TINYTEXT: 256 байт.
TEXT: 65 535 байт.
MEDIUMTEXT: 16 777
215 байт. LONGTEXT: 4 294 967 295 байт.

Кристиан Оана
источник
10
Я думаю, что TINYTEXT должен быть 255 байтов вместо 256 байтов, в соответствии с принятым ответом?
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

Примечание. Если используются многобайтовые символы (например, арабский, где каждый арабский символ занимает 2 байта), столбец «Максимальная допустимая длина» TINYTEXTможет содержать до 127 арабских символов (Примечание: пробел, тире, подчеркивание и другие подобные символы). , являются 1-байтовыми символами).

По сути, это как:

«Максимальная допустимая длина» = «Приблизительная длина» в байтах - 1

evilReiko
источник
18

Согласно http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html , ограничение составляет L + 2 bytes, where L < 2^16или 64 КБ.

Вам не нужно беспокоиться об ограничении этого, оно автоматически разбивается на куски, которые добавляются по мере роста строки, поэтому она не всегда будет слепо использовать 64 КБ.

Blindy
источник
8

Сколько символов может хранить текстовое поле типа?

Согласно документации вы можете использовать максимум 21 844 символов, если кодировка UTF8

Если много, смогу ли я указать длину в поле типа текста в БД, как в случае с varchar?

Вам не нужно указывать длину. Если вам нужно больше символов, используйте типы данных MEDIUMTEXT или LONGTEXT. В случае VARCHAR заданная длина не для требований к хранилищу, а только для способа извлечения данных из базы данных.

SCC
источник
8
TINYTEXT 256 bytes
TEXT 65,535 bytes ~64kb
MEDIUMTEXT 16,777,215 bytes ~16MB
LONGTEXT 4,294,967,295 bytes ~4GB

TINYTEXTявляется строковым типом данных, который может хранить до 255символов.

TEXTстроковый тип данных, который может хранить до 65,535символов TEXTобычно используется для кратких статей.

LONGTEXTявляется строковым типом данных с максимальной длиной 4,294,967,295символов. Используйте, LONGTEXTесли вам нужно хранить большой текст, например главу романа.

Sachith
источник
1

TEXTэто строковый тип данных, который может хранить до 65 535 символов. Но все же, если вы хотите сохранить больше данных, измените их тип данных наLONGTEXT

ALTER TABLE name_tabelCHANGE text_fieldLONGTEXT CHARACTER SET utf8COLLATE utf8_general_ciNOT NULL;

Сохель Шейх
источник
1

Для версии MySql 8.0.

Требования к хранению числового типа

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

Значения для столбцов DECIMAL (и NUMERIC) представлены в двоичном формате, который упаковывает девять десятичных (основание 10) цифр в четыре байта. Хранение для целой и дробной частей каждого значения определяется отдельно. Каждому кратному из девяти цифр требуется четыре байта, а оставшимся цифрам требуется некоторая доля четырех байтов. Объем памяти, необходимый для избыточных цифр, указан в следующей таблице.

Требования к хранилищу типа даты и времени Для столбцов TIME, DATETIME и TIMESTAMP, хранилище, необходимое для таблиц, созданных до MySQL 5.6.4, отличается от таблиц, созданных с 5.6.4 и далее. Это связано с изменением в 5.6.4, которое позволяет этим типам иметь дробную часть, что требует от 0 до 3 байтов.

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

Начиная с MySQL 5.6.4, хранилище для ГОДА и ДАТЫ остается неизменным. Однако TIME, DATETIME и TIMESTAMP представлены по-разному. DATETIME упаковывается более эффективно, требуя 5, а не 8 байтов для нефракционной части, и все три части имеют дробную часть, которая требует от 0 до 3 байтов, в зависимости от точности сохраненных значений в долях секунды.

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

Например, TIME (0), TIME (2), TIME (4) и TIME (6) используют 3, 4, 5 и 6 байтов соответственно. ВРЕМЯ и ВРЕМЯ (0) эквивалентны и требуют одинакового хранения.

Для получения подробной информации о внутреннем представлении временных значений, см. MySQL Internals: Важные алгоритмы и структуры.

Требования к хранению строкового типа В следующей таблице M представляет объявленную длину столбца в символах для недвоичных строковых типов и байтов для двоичных строковых типов. L представляет фактическую длину в байтах данного строкового значения.

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)
Rohit.007
источник