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


437

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

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


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


18

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

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


8

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

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

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

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


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если вам нужно хранить большой текст, например главу романа.


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)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.