MySQL类型文字的最大长度


436

我正在创建一个用于发送私人消息的表单,并希望将maxlengthtextarea 的值设置为适合textMySQL数据库表中字段的最大长度。类型文本字段可以存储多少个字符?

如果很多,我可以像使用varchar一样在数据库文本类型字段中指定长度吗?


5
在简单的文本字段中输入64k?痛苦的...
Marc B

168
@Marc B永远不要低估用户将大量垃圾粘贴到私人文本消息字段中的能力。
simontemplar

5
这就是为什么您应该限制文本字段容量并始终验证输入的原因...
jpangamarca

Answers:


748

请参阅参考资料以获取最大数量: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(使用单字节字符)。表示65535个字符(使用单字节字符)。

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字节= 65538字节/满填充字段。
2012年

9
请注意,大小限制以字节为单位。因此,如果使用多字节字符,则在TEXT列中不会得到2 ^ 16个字符,但是会存储很多可以在2 ^ 16个字节中存储的字符。
Bill Karwin

4
Bill Karwin说了什么。字节,不是字符。字符可以使用4个字节以给定的编码进行存储(例如UTF-8中的💩)。
basic6 2014年

8
请注意,在MySQL中,utf8消耗多达3个字节,utf8mb4消耗多达4个字节。参考
mpen 2015年

126

TINYTEXT:256个字节
TEXT:65,535个字节
MEDIUMTEXT:16,777,215个字节
LONGTEXT:4,294,967,295个字节


10
根据公认的答案,我认为TINYTEXT应该是255个字节而不是256个字节?
cytsunny

82
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



8

类型文本字段可以存储多少个字符?

根据文档,如果字符集为UTF8,则最多可以使用21,844个字符

如果很多,我可以像使用varchar一样在db文本类型字段中指定长度吗?

您不需要指定长度。如果需要更多字符,请使用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开始,YEAR和DATE的存储保持不变。但是,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个字节。TIME和TIME(0)等效,并且需要相同的存储空间。

有关时间值的内部表示的详细信息,请参见MySQL内部:重要算法和结构。

字符串类型的存储要求下表中,M表示非二进制字符串类型的声明列长度,以字符表示,对于二进制字符串类型,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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.