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

如果有很多,我是否能够在数据库文本类型字段中指定长度,因为我将与varchar?


当前回答

适用于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)列的值使用二进制格式表示,该格式将9个十进制(以10为基数)数字装入4个字节。每个值的整数部分和小数部分的存储分别确定。每个九位数的倍数需要四个字节,“剩余的”数字需要四个字节的一部分。多余数字所需的存储空间如下表所示。

日期和时间类型存储要求 对于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表示声明的列长度,对于非二进制字符串类型以字符表示,对于二进制字符串类型以字节表示。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)

其他回答

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

基本上是这样的:

“确切的马克斯。允许长度" = "约。长度",单位为字节- 1

注意:如果使用多字节字符(如阿拉伯语,其中每个阿拉伯语字符占用2个字节),列“Exact Max.”长度允许”TINYTEXT可以容纳多达127个阿拉伯字符(注:空格,破折号,下划线,和其他这样的字符,是1字节字符)。

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

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

如果很多,我是否能够在db文本类型字段中指定长度,因为我将与varchar?

你不需要指定长度。如果需要更多字符,请使用MEDIUMTEXT或LONGTEXT数据类型。使用VARCHAR,指定的长度不是为了存储需求,它只是为了如何从数据库中检索数据。

适用于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)列的值使用二进制格式表示,该格式将9个十进制(以10为基数)数字装入4个字节。每个值的整数部分和小数部分的存储分别确定。每个九位数的倍数需要四个字节,“剩余的”数字需要四个字节的一部分。多余数字所需的存储空间如下表所示。

日期和时间类型存储要求 对于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表示声明的列长度,对于非二进制字符串类型以字符表示,对于二进制字符串类型以字节表示。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)

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

查看最大数字: 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是文本字段的字节数。因此文本的最大字符数是216-1(使用单字节字符)。表示65535个字符(使用单字节字符)。

UTF-8/多字节编码:使用多字节编码,每个字符可能会占用超过1字节的空间。对于UTF-8,每个字符的空间消耗在1到4字节之间。