何时在 mysql 中使用 TEXT 而不是 VARCHAR [重复]
Posted
技术标签:
【中文标题】何时在 mysql 中使用 TEXT 而不是 VARCHAR [重复]【英文标题】:When to use TEXT in mysql instead of VARCHAR [duplicate] 【发布时间】:2012-07-11 14:41:45 【问题描述】:可能重复:mysql: Large VARCHAR vs. TEXT?
既然VARCHAR
现在可以有65k 字节,那么什么时候应该使用TEXT
而不是VARCHAR
?
【问题讨论】:
当您需要超过 65k 个字符时。 :) 我认为应该是 65k 字节,而不是字符 哦,是的。 65k 字节。更新了我的问题。 【参考方案1】:文本应该用于非常长的不确定长度的字符串。此外,返回 TEXT 字段的查询往往比对应的 VARCHAR 慢得多。
【讨论】:
在我的数据库中,我有一个名为 Description 的列。数据类型应该是 VARCHAR 还是 TEXT?我不确定描述数据的长度,但我计划在前端设置字数限制,以便它具有最大长度。【参考方案2】:长 VARCHAR
的存储方式与 InnoDB
中的 TEXT
/BLOB
字段相同。
从存储准 BLOB、TEXT 为 以及只要 VARCHAR 处理相同 通过 Innodb 的方式。这就是为什么 Innodb 手册称它为“长列”而不是 比 BLOB。
source
除非您需要索引这些列(在这种情况下,VARCHAR
更快)没有理由使用 VARCHAR
而不是 TEXT
用于长字段 - MySQL
中有一些特定于引擎的优化来调整根据长度检索数据,您应该使用正确的列类型来利用这些。
如果您使用的是MyISAM
,则有关该主题的深入讨论是here。
TEXT
和 BLOB
存储在表外,表中只有一个指向实际存储位置的指针。
VARCHAR
与表内联存储。 VARCHAR
在大小合理时会更快。
根据this test,VARCHAR
的速度大约是文本的三倍。
【讨论】:
定义“长字段”。 @PaulBrewczynski > 768 字节(参见 Lion 发布的链接) 对 InnoDB 的一个更正:仅当“long”(> 768 字节)时,TEXT 和 BLOB 才从表中存储在 InnoDB 中,并且只有尾部存储在表外(类似于 VARCHAR)。真正的区别在于最大长度不同,而对于 VARCHAR,您必须提供最大长度(与 65k 的系统限制一起强制执行)。 啊,应该知道数据类型会影响性能 更新:自编写此答案以来,在 InnoDB 中创建了更多ROW_FORMATs
,并且 767 限制已增长到大约 3K。底线:经过“几个”KB,VARCHAR
和 TEXT
的处理方式相同。以上是关于何时在 mysql 中使用 TEXT 而不是 VARCHAR [重复]的主要内容,如果未能解决你的问题,请参考以下文章
何时更喜欢 XAMPP 而不是 Linux、Apache、MySQL 和 PHP 的完整安装
为啥以及何时在 Spring 中使用 @Inject 而不是 @Autowired? [复制]