【发布时间】:2011-05-18 05:53:01
【问题描述】:
既然数据被分类为int、decimal、text(string)、date、enum,为什么mysql还需要将它们分类分成更多组,就像text被分成char、varchar、text、tinytext , ETC?我知道这会使其更快,但是分类到更多组和使其更快之间有什么关系?是什么原因?
对不起,我的英语不好。
【问题讨论】:
既然数据被分类为int、decimal、text(string)、date、enum,为什么mysql还需要将它们分类分成更多组,就像text被分成char、varchar、text、tinytext , ETC?我知道这会使其更快,但是分类到更多组和使其更快之间有什么关系?是什么原因?
对不起,我的英语不好。
【问题讨论】:
嗯,背后的主要原因是内存。看到地址是文本信息,名称是文本信息,如果你想存储任何值像yes和no也是一个文本值,如果你想从任何人那里获取评论或帖子也是text 值。所有这些价值观都需要不同的记忆。当您谈论大型系统时,内存是一个重要因素。例如,如果您为所有文本信息设置text 类型,这是非常不好的做法。所以mysql分为不同的东西。比如如果你想存储名字你可以使用varchar(50),如果你想存储地址你甚至可以使用varchar(255)。如果您想存储帖子或评论和描述或任何内容,您可以使用text。如果您想使用yes 和no 之类的信息,您可以使用char。希望你能理解。
【讨论】:
字符串类型的变体数量是进步的标志。在理想的世界中,旧类型将被删除,新的和改进的类型将取代它们。但是,在现实世界中,遗留兼容性需要字段类型,例如,对于期望它的应用程序,其行为类似于 1960 年代 COBOL 字符串处理。因此,char(20) 类型使用尾随空格填充,以充当 IBM 按键卡。
将各种子类型想象成一套螺丝刀,有的小,有的大。每个都有一个狭窄的适当使用范围。如果您正在制作怀表,则不需要大螺丝刀。但是,如果应用程序是桥梁建设,那么微型精密螺丝刀仍然没有使用,而大的则可以使用。数据库很像。
【讨论】: