MySQL:存储长注释的最有效数据类型是什么?

11

我想创建一个个人笔记数据库,用来存储相当长的HTML或文本笔记。在使用VARCHARTEXT字段时有什么区别?哪一个更高效?

我认为VARCHAR的最大长度是65535个字符,尽管我无法想象是否有任何内容超过这个限制。我想知道是否可以自动压缩某些数据类型,但我觉得这并不简单(因为实际使用中会占用太多CPU时间)。

3个回答

13

如果您不确定文本是否总是少于65535个字符,请不要冒险使用varchar。我认为您应该使用mediumtext甚至longtext类型,但为了提高性能,请将它们放入单独的表中。例如,创建一个名为Notes的表,其中包含笔记ID、标题、创建日期和创建者用户,还有一个与Notes相关联的NotesText表,只包含笔记ID和文本列。这将防止查询文本类型列并在不需要时从数据库中检索它。


我发现这是最相关的答案,我很想将它放到另一个表中,以练习效率,非常感谢。 - John
这是错误的。Mysql中的文本长度被限制在同样的65535个字符内。 - BarsMonster
1
好的,你已经告诉过他了,他可以使用MEDIUMTEXT,但为什么你要第三次写相同的东西?你认为他没有看到你的答案吗? - Łukasz W.
1
好的,他接受了错误的解决方案后,很可能不会注意到新的评论 :-) 无论如何,现在是正确的。 - BarsMonster
这真的很有帮助,谢谢。 - Tim Bogdanov

4

AFAIR TEXT仅限于65k个字符,MEDIUMTEXT为1600万个字符,而LONGTEXT最大为4GB :-)


2
没有任何限制阻止您在存储数据之前压缩和解压缩数据(例如,通过gzip)。在这种情况下,您必须使用BLOB类型。 - BarsMonster
我肯定会考虑这样做,但是无法查看文本并在查询等操作中使用它们会很麻烦,不过我肯定会压缩一个超过4MB的文件,谢谢! - John
这个很好知道,谢谢。 - Tim Bogdanov

2

VARCHAR的最大长度不是65535个字节;行的最大长度是那么多个字节,VARCHAR的最大长度取决于表中其他列的情况。因此,如果您可能需要那么多字符,您将需要一个TEXT或BLOB列。这些被单独存储在磁盘上,因此倾向于更慢(不是CPU使用量,而是总时间)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接