关于 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 数据类型的困惑的主要内容,如果未能解决你的问题,请参考以下文章

关于MySQL中的varchar类型的研究

Oracle的N-数据类型困惑

关于SQL Server 2000 Varchar长度的一个问题!!请高手解答

关于 TDengine 支持的数据类型

Mysql数据类型

关于Mysql数据库中varchar类型的数据插入时数据前面的0被略去问题的解决方法