首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >char或varchar

char或varchar
EN

Stack Overflow用户
提问于 2013-02-19 17:34:34
回答 2查看 255关注 0票数 1

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

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

大多数被接受的图像扩展名要么是jpgpng,要么是gif,要么是bmp,要么是jpeg,要么是tiff,换句话说,最大长度为4个字符。

现在,应该像下面这样在MySQL表中声明该属性:

代码语言:javascript
复制
extension char(4)

代码语言:javascript
复制
extension varchar(4)

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

有没有人?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-19 17:46:29

取决于..。

如果您从MySQL文档中看到这一点

代码语言:javascript
复制
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是更好的选择。

詹姆斯:-)

票数 3
EN

Stack Overflow用户

发布于 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个字节,则使用两个长度字节。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14954148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档