这可能是一个愚蠢的问题,但我需要问......
我创建了一个MySQL表来处理名为images
的图像。在其中,我有一个属性来保持图像的扩展名为extension
。
大部分接受的图片扩展程序为jpg
或png
或gif
或bmp
或jpeg
或tiff
换句话说,最多4
个字符。
现在,应该在MySQL表中声明属性,如:
extension char(4)
或
extension varchar(4)
对性能的影响可能没什么影响,但我确实希望从开始时对模型进行优化......
任何?
答案 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个字节,则列使用两个长度字节。