关于 varchar 数据类型的困惑
Posted
技术标签:
【中文标题】关于 varchar 数据类型的困惑【英文标题】:Confusion about varchar datatype 【发布时间】:2010-10-07 08:52:22 【问题描述】:我的服务器有我的 SQL 版本 5.0.91-community,现在我必须存储大约 500 个字符的长字符串或多或少,我想使用文本数据类型,但后来有人告诉我这会降低性能,我想了解更多关于 varchar 及其限制的信息。
我曾经认为 varchar 仅限于 255 个字符,但后来我在某个地方读到它,它能够存储比新版本更多的内容,即 >= 5.0.3 ,因为我使用的是 5.0.91 做什么你觉得我应该用吗?如果我像 varchar(1000) 一样使用它,它仍然有效吗?
谢谢。
【问题讨论】:
【参考方案1】:文档是here,
varchar 在 mysql 5.0.3 及更高版本中的最大大小为 65,535,在 5.0.3 之前限制为 255注意有效尺寸较小,
a的有效最大长度 MySQL 5.0.3 及更高版本中的 VARCHAR 是 受最大行大小限制 (65,535 字节,在 所有列)和字符集 用过。
您必须指定最大尺寸,例如varchar(1000)
。仅仅声明varchar
是不够的。
【讨论】:
好的,varchar 不是用来动态利用存储的吗?如果是,我可以将其定义为 VARCHAR 还是必须提及我将使用多少个字符?像 VARCHAR(1000)【参考方案2】:来自The CHAR and VARCHAR Types
VARCHAR 列中的值是 变长字符串。长度 可以指定为从 0 到 65,535。有效最大长度 一个 VARCHAR 是受最大 行大小(65,535 字节,即 所有列之间共享)和 使用的字符集。
【讨论】:
我之前确实看到了这一点,但由于没有明确提及而感到困惑。仍然感谢您的努力,我很感激。 :)【参考方案3】:根据 MySQL 文档:
TEXT 在以下方面与 VARCHAR 不同:
在存储或检索值时,不会删除 TEXT 列的尾随空格。在 MySQL 5.0.3 之前,这与 VARCHAR 不同,后者在存储值时会删除尾随空格。 对于 TEXT 列上的索引,您必须指定索引前缀长度。对于 CHAR 和 VARCHAR,前缀长度是可选的。 TEXT 列不能有 DEFAULT 值。除了这些差异之外,使用 VARCHAR 就像使用 TEXT 一样,所以大小问题不是让您在这两者之间做出选择的原因,除非您确实需要存储不超过 1000 个字符。
【讨论】:
【参考方案4】:在 MySQL 中,VARCHAR 最多接受 65535 个字符。
【讨论】:
【参考方案5】:您可以很容易地向自己保证。 Mysql 文档是公开访问的,上面写着
Values in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 255 before MySQL 5.0.3, and 0 to 65,535 in 5.0.3 and later versions
至于性能问题,没关系。不是数据类型,而是数据关系会影响性能。
【讨论】:
以上是关于关于 varchar 数据类型的困惑的主要内容,如果未能解决你的问题,请参考以下文章