1

这可能是一个愚蠢的问题,但我需要问......

我创建了一个 MySQL 表来处理名为images. 在其中,我有一个属性可以保持图像的扩展名为extension.

大多数接受的图像扩展名要么是要么jpgpng要么gifbmpjpegtiff换句话说,最多4字符长。

现在,是否应该在 MySQL 表中声明该属性,如:

extension char(4)

或者

extension varchar(4)

可能对性能没有任何影响,但我确实希望从一开始就优化模型......

任何人?

4

2 回答 2

3

依靠....

如果您从 MySQL 文档中查看此内容

Value      CHAR(4)  Storage Required    VARCHAR(4)  Storage Required
''         '    '   4 bytes             ''          1 byte
'ab'       'ab  '   4 bytes             'ab'        3 bytes
'abcd'     'abcd'   4 bytes             'abcd'      5 bytes
'abcdefgh' 'abcd'   4 bytes             'abcd'      5 bytes

如您所见,CHAR 的 4 个字符占用 4 个字节,而 VARCHAR 占用 5 个字节。如果绝大多数扩展都是 4 个字符,那么 CHAR 会更节省空间。

在你的情况下,我猜 3 将是多数,所以 VARCHAR 是更好的选择。

詹姆士 :-)

于 2013-02-19T09:46:28.640 回答
2

编辑后,我对之前的答案做出了错误的假设。我将向您粘贴http://dev.mysql.com/doc/refman/5.0/en/char.html的摘录(已添加重点)

CHAR 和 VARCHAR 类型相似,但它们的存储和检索方式不同。从 MySQL 5.0.3 开始,它们在最大长度和是否保留尾随空格方面也有所不同。

CHAR 和 VARCHAR 类型的声明长度表示要存储的最大字符数。例如,CHAR(30) 最多可容纳 30 个字符。

CHAR 列的长度固定为您在创建表时声明的长度。长度可以是 0 到 255 之间的任何值。存储 CHAR 值时,它们会用空格右填充到指定长度。检索 CHAR 值时,将删除尾随空格。

VARCHAR 列中的值是可变长度字符串。在 MySQL 5.0.3 之前,长度可以指定为 0 到 255 之间的值,在 5.0.3 和更高版本中可以指定为 0 到 65,535 之间的值。MySQL 5.0.3 及更高版本中 VARCHAR 的有效最大长度取决于最大行大小(65,535 字节,在所有列之间共享)和使用的字符集。

与 CHAR 相比,VARCHAR 值存储为一个字节或两个字节长度的前缀加上数据。长度前缀表示值中的字节数。如果值需要不超过 255 个字节,则一列使用一个长度字节,如果值可能需要超过 255 个字节,则使用两个长度字节。

于 2013-02-19T09:37:29.193 回答