首页 > 解决方案 > MySQL 如何解释 VARCHAR 字段大小?

问题描述

假设一个字段是这样声明的:

一个 VARCHAR(255)

里面能存多少个字符,是255还是256?以及使用了多少空间?

我们应该使用 2 的幂然后减去 1,还是没关系?

标签: mysql

解决方案


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


推荐阅读