Mysql 拉丁类型声明的char(17)与varchar(17)

Mysql 拉丁类型声明的char(17)与varchar(17),mysql,char,varchar,Mysql,Char,Varchar,我有一个存储图像的数据库表。可接受的类型是jpg/png/gif/并且名称总是有13个字符 换言之,文件名长度始终为17个字符(13个字符代表名称+扩展名“.”+扩展名) 对于我在这里读到的所有内容,我认为我应该将其声明为char,因为它占用的空间更少 以下是我的两个问题: 假设我的文件名总是latin1类型,而不是 utf8,char(17)比varchar(17)占用的字节更少,这是真的吗 如果是,有多少?(我实际上不知道如何计算char和varchar中的字节) 感谢RTFM:在处理u

我有一个存储图像的数据库表。可接受的类型是jpg/png/gif/并且名称总是有13个字符

换言之,文件名长度始终为17个字符(13个字符代表名称+扩展名“.”+扩展名)

对于我在这里读到的所有内容,我认为我应该将其声明为char,因为它占用的空间更少

以下是我的两个问题:

  • 假设我的文件名总是latin1类型,而不是 utf8,char(17)比varchar(17)占用的字节更少,这是真的吗
  • 如果是,有多少?(我实际上不知道如何计算char和varchar中的字节)

感谢

RTFM:在处理utf-8时,您只能假设char/varchar中的字节数在最坏情况下为最大值,因为单个utf-8字符可能至少为2-4个字节,并且可能更长。因此,如果我正确读取了您的链接,char为17个字节,varchar为18个字节(假设它们是拉丁类型)因此我应该在我的表中使用char(17)。。。是这样吗?是的。字符字段的长度与其指定的长度显式相同。如果在字段中插入的字符少于该值,DB将填充掉“缺少的”字符,以便插入的大小与字符字段的实际大小匹配。varchar必须存储插入的数据的长度,因此存储该大小会产生开销。无论您插入的字段的长度是精确的还是更短的。请讨论确保正确声明列的起始位置以开始。我的意思是20个错误的声明,包含25000条记录,这在您的数据库大小中是额外的5mb。。。这只适用于一种类型。。。谢谢@MarcB