首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL对VarChar(255)和VarChar(65536)的不同处理

MySQL对VarChar(255)和VarChar(65536)的不同处理
EN

Stack Overflow用户
提问于 2011-05-05 13:57:39
回答 2查看 32.3K关注 0票数 14

有人知道使用VarChar(255)和VarChar(65536)的区别吗?

到目前为止,我知道的是:

size

  • VarChar(65536)只使用一个字节,size

  • VarChar(65536)只使用两个字节,因为MySQL 5.0.3

  • MySQL使用的是255-65536之间的不同处理(尽管不知道区别)

我不确定的是,这些变色龙之间是否有性能上的差别。

假设我希望创建一个具有多个类型行的表。使用带有“data_type1”和“data_type2”的枚举

data_type1在varchar中的字符永远不会超过255个,data_type2中的大多数字符将超过255个。

哪个解决方案表会更好?

代码语言:javascript
运行
复制
id (int) - autoincrement
type (enum : data_type1, data_type2)
msg (varchar(255))
data (TEXT)

当输入== data_type2时,只使用'data‘列?

代码语言:javascript
运行
复制
id (int) - autoincrement
type (enum : data_type1, data_type2)
msg (varchar(65536))

使用“msg”列的是什么类型的?

实际上,在这两种解决方案上都需要类型列,用于治疗目的。

编辑:

当输入== data_type2时,存储的数据实际上永远不会超过10000字符

编辑2:

我不想在msg和列中搜索

这是一个关于存储性能的简单问题,而不是索引或搜索.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-05 14:27:24

您提到了一些事实,我将解释VARCHAR是如何工作的。

如果您指定了VARCHAR( 60 ),这意味着它最多可以容纳60个字符。如果它包含较少的字符,比如50个-那么MySQL使用50个字节来存储数据,而不是60个。

它与CHAR( 60 )正好相反,它保留60个字节,而不考虑要保存的字符串的长度。

现在,VARCHAR是如何工作的?如果将其指定为VARCHAR(255),这意味着该列将保留1字节+字符串字节的长度。这1字节表示字符串的长度。1字节=可以存储从0到255的值(2到8= 256)。

至于高于255的VARCHAR,您需要以某种方式存储所使用的字节数。由于1字节只能存储256个不同的值(0-255),所以需要使用两个字节。二次方为16 = 65536,这意味着您可以将任何字符串存储到该大小,然后将其加为2个字节,以指示字符串的长度。

因此,缩短性能差异是,如果您有VARCHAR(65536)并且使用200个字节来存储文本--您是在浪费VARCHAR(65536)将使用的额外的一个字节。有人可能会想“哦,但那只是一个字节,谁在乎呢”。实际上,很多人都这么做--想象一下,在一个有5000万张记录的表上有几个VARCHAR列。假设您有3个varchar列,每个列都会浪费额外的字节--即3字节*5000万~ 144兆字节的浪费空间。有趣的是,这不仅仅是浪费空间。它还有助于处理开销和使用额外的RAM时,您想要阅读的东西。谁说你的数据库中只有一个表会变大呢?

了解这些信息可能会帮助你自己决定什么是最好的使用。

http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html --如果您以前没有检查它,它会解释每种数据类型是如何存储的,以及它需要多少空间。

票数 34
EN

Stack Overflow用户

发布于 2011-05-05 14:11:24

与任何其他字符串类型相比,使用VARCHAR更好,因为TEXT有大小限制,CHAR在磁盘上保留空间。VARCHAR只对您输入的字符使用空格。

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

https://stackoverflow.com/questions/5898904

复制
相关文章

相似问题

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