char或varchar

时间:2013-02-19 09:34:34

标签: mysql varchar

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

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

大部分接受的图片扩展程序为jpgpnggifbmpjpegtiff换句话说,最多4个字符。

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

extension char(4)

extension varchar(4)

对性能的影响可能没什么影响,但我确实希望从开始时对模型进行优化......

任何?

2 个答案:

答案 0 :(得分: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是更好的选择。

詹姆斯: - )

答案 1 :(得分: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个字节,则列使用两个长度字节。