这可能是个愚蠢的问题但我需要问..。
我已经创建了一个名为images的MySQL表来处理图像。在其中,我有一个名为extension的属性,用于保存图像的扩展名。
大多数被接受的图像扩展名要么是jpg或png,要么是gif,要么是bmp,要么是jpeg,要么是tiff,换句话说,最大长度为4个字符。
现在,应该像下面这样在MySQL表中声明该属性:
extension char(4)或
extension varchar(4)这可能对性能没有任何影响,但我确实希望模型从一开始就进行优化……
有没有人?
发布于 2013-02-19 17:46:29
取决于..。
如果您从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如您所见,4个字符的CHAR占用4个字节,而VARCHAR占用5个字节。如果绝大多数扩展名都是4个字符,那么CHAR的空间效率会更高。
在您的情况下,我猜3将是多数,所以VARCHAR是更好的选择。
詹姆斯:-)
发布于 2013-02-19 17:37:29
经过编辑,我对之前的答案做了错误的假设。我只是从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和更高版本中,VARCHAR5.0.3和更高版本中的有效最大长度取决于最大行大小(65,535字节,在所有列之间共享)和所使用的字符集。
与CHAR相反,VARCHAR值存储为一个字节或两个字节的长度前缀加上数据。长度前缀表示值中的字节数。如果值需要不超过255个字节,则列使用一个长度字节;如果值可能需要超过255个字节,则使用两个长度字节。
https://stackoverflow.com/questions/14954148
复制相似问题