根据mysql文档:
如果值不超过255个字节,则列使用一个长度字节; 如果值可能需要超过255个字节,则列使用 两个长度字节
和
最大行大小会限制列数,因为所有列的总宽度不能超过此大小.例如,utf8字符每个字符最多需要三个字节,因此对于CHAR(255)CHARACTER SET utf8列,服务器必须为每个值分配255×3 = 765个字节.因此,一个表不能包含超过65,535/765 = 85个这样的列.
为清楚起见,那么我可以在varchar参数中设置的最大值是什么,所以它只使用1个字节来存储它的长度?
dan*_*n04 10
从MySQL文档:
声明CHAR和VARCHAR类型的长度指示要存储的最大字符数.例如,CHAR(30)最多可以包含30个字符.
如果值不需要超过255 个字节,则[VARCHAR]列使用一个长度字节;如果值可能需要超过255 个字节,则使用两个长度 字节.
这使得您的问题的答案取决于字符编码.
使用像Windows-1252这样的单字节编码(MySQL调用latin1),字符长度与字节长度相同,因此可以使用VARCHAR(255).
对于UTF-8,VARCHAR(N)可能需要最多3N字节,如果所有字符都在U + 0800到U + FFFF范围内的话.因此,a VARCHAR(85)是确保单字节字节长度(最多需要255个字节)的最大值.
(请注意,MySQL显然不支持BMP之外的字符.UTF-8的官方定义允许每个字符4个字节.)
为清楚起见,那么我可以在varchar参数中设置的最大值是什么,所以它只使用1个字节来存储它的长度?
这取决于VARCHAR列的整理.
正如您所指出的,每个字符最多UTF8 可以使用三个字节,因此如果您声明的UTF8列长度超过85字符数,则有可能使用多个255字节来存储其数据,因此长度应存储在两个字节中字节.
如果使用latin1,则每个字符都以1字节存储.
所以答案是:
VARCHAR(85) COLLATE UTF8_GENERAL_CI
Run Code Online (Sandbox Code Playgroud)
, 要么
VARCHAR(255) COLLATE LATIN1_GENERAL_CI
Run Code Online (Sandbox Code Playgroud)