假设这样声明一个字段:一个varchar(255)它能存储多少个字符,是255还是256?占用了多少空间?我们应该用2的幂减去1,还是没关系?
yrefmtwq1#
在mysql中, varchar(255) 将使用 255 bytes (最大)存储数据和 1 byte 存储有关该数据的元数据(长度信息)。从本质上说,这是 2^8 . 现在,你能存储多少个字符 255 bytes 取决于您使用的字符集。一个字符的寻址和存储所需的字节数取决于字符集总共有多少个字符。
varchar(255)
255 bytes
1 byte
2^8
9q78igpj2#
一 VARCHAR(255) 可以存储多达255个字符,而不考虑字符集编码所需的每个字符的字节数。存储要求是实际存储数据的长度(不是最大值),再加上1或2个字节来存储数据的长度——除非最大可能长度(以字节为单位)大于255,否则使用1个字节。。。所以 VARCHAR(255) COLLATE utf8mb4 使用2个字节存储长度,而 VARCHAR(255) COLLATE ascii_general_ci 使用1字节存储长度。任何一列最多只能存储255个字符。为存储的数据声明适当的列大小。使用255是很常见的,但通常是设计粗枝大叶的标志,因为这个特定值很少有意义地表示一列的最大适当长度。相比之下 CHAR(255) COLLATE utf8mb4 总是消耗255× 每列每行4(最大可能)字节,存储长度为0字节,因为存储的长度不变。这些列很少是合适的,除非列的长度总是已知的,并且字符集是单字节的,比如uuid CHAR(36) COLLATE ascii_general_ci .https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html#data-类型存储请求字符串
VARCHAR(255)
VARCHAR(255) COLLATE utf8mb4
VARCHAR(255) COLLATE ascii_general_ci
CHAR(255) COLLATE utf8mb4
CHAR(36) COLLATE ascii_general_ci
2条答案
按热度按时间yrefmtwq1#
在mysql中,
varchar(255)
将使用255 bytes
(最大)存储数据和1 byte
存储有关该数据的元数据(长度信息)。从本质上说,这是2^8
. 现在,你能存储多少个字符255 bytes
取决于您使用的字符集。一个字符的寻址和存储所需的字节数取决于字符集总共有多少个字符。
9q78igpj2#
一
VARCHAR(255)
可以存储多达255个字符,而不考虑字符集编码所需的每个字符的字节数。存储要求是实际存储数据的长度(不是最大值),再加上1或2个字节来存储数据的长度——除非最大可能长度(以字节为单位)大于255,否则使用1个字节。。。所以
VARCHAR(255) COLLATE utf8mb4
使用2个字节存储长度,而VARCHAR(255) COLLATE ascii_general_ci
使用1字节存储长度。任何一列最多只能存储255个字符。为存储的数据声明适当的列大小。使用255是很常见的,但通常是设计粗枝大叶的标志,因为这个特定值很少有意义地表示一列的最大适当长度。
相比之下
CHAR(255) COLLATE utf8mb4
总是消耗255× 每列每行4(最大可能)字节,存储长度为0字节,因为存储的长度不变。这些列很少是合适的,除非列的长度总是已知的,并且字符集是单字节的,比如uuidCHAR(36) COLLATE ascii_general_ci
.https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html#data-类型存储请求字符串