mysql - MySQL 如何解释 VARCHAR 字段大小?
问题描述
假设一个字段是这样声明的:
一个 VARCHAR(255)
里面能存多少个字符,是255还是256?以及使用了多少空间?
我们应该使用 2 的幂然后减去 1,还是没关系?
解决方案
AVARCHAR(255)
最多可以存储 255 个字符,而与字符集编码所需的每个字符的字节数无关。
存储要求是实际存储数据的长度(不是最大值),加上 1 或 2 个字节来存储数据的长度——除非最大可能长度(以字节为单位 > 255),否则使用 1 个字节......所以VARCHAR(255) COLLATE utf8mb4
使用2 个字节存储长度,而 aVARCHAR(255) COLLATE ascii_general_ci
使用 1 个字节存储长度。任一列可以存储不超过 255 个字符。
根据要存储的数据声明列大小。使用 255 很常见,但通常是设计马虎的危险信号,因为这个特定值很少有意义地表示一列的最大适当长度。
相比之下,aCHAR(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-types-storage-reqs-strings