在MySQL中存储小型XML文档,使用VARCHAR和TEXT有哪些优缺点?

6
如果要存储的 XML 文档总是小于 64 KiB(这是 VARCHAR 的限制),那么在此任务中使用 VARCHAR 和 TEXT 列类型有哪些优缺点?

2
虽然我对MySQL不是很熟悉,但在SQL Server中,TEXT数据类型已经过时,VARCHAR(MAX)更受青睐。 TEXT数据类型的一些缺点包括无法索引、存储在页面之外以及无法使用LIKE条件进行搜索。 - Lieven Keersmaekers
@lieven,你确定要使用“obsolete”吗?在某些情况下,它不是比VARCHAR更适合吗?就我的特定情况而言,我打算设置文本一次,并偶尔获取它(通过单独的、无需连接的查询查找一个更简单的键字段),可能既不需要更新也不需要分析它。 - Ivan
1
请注意,我特指SQL Server,但我想象MySQL总有一天也会走同样的路线。不要把这当作普遍建议,我很想知道社区对此有何看法,并希望有经验的人能发表意见。 - Lieven Keersmaekers
1
正如@Lieven所说,特别是针对MS SQL Server,text、ntext和image都已被弃用。请参阅http://msdn.microsoft.com/en-us/library/ms187993.aspx了解详情。我也同意在MySQL中遵循相同的路线似乎是一个好的做法,但我*没有*任何参考来支持这个猜测。 - MatBailie
@lieven,你为什么删除了 xmljdbc 标签?我要存储 XML 并使用 JDBC 访问数据库,所以我对这个特定领域的实践特别感兴趣。 - Ivan
@Ivan - 主观的说,我认为这更多是一个MySQL存储问题,而不是XML或JDBC。我会假设如果删除这两个标签并添加SQL特定标签(至少Dems是),更多的人会被吸引到这个问题上来。如果您不同意,请随时回滚。 - Lieven Keersmaekers
1个回答

2
以下摘录来自MySQL文档,涉及字符串类型
“可变长度字符串。M表示字符中的最大列长度。M的范围是0到65,535。VARCHAR的有效最大长度取决于最大行大小(65,535字节,这是所有列共享的)和使用的字符集。例如,utf8字符每个字符可能需要高达三个字节,因此使用utf8字符集的VARCHAR列可以被声明为最多21,844个字符。请参阅第E.10.4节“表列数和行大小限制”。
MySQL将VARCHAR值存储为一个字节或两个字节的长度前缀加数据。长度前缀指示值中的字节数。如果值不超过255个字节,则VARCHAR列使用一个长度字节,如果值可能需要超过255个字节,则使用两个长度字节。”
TEXT的摘录:
“TEXT”类型的列最大长度为65,535个字符(216 - 1)。如果该值包含多字节字符,则有效的最大长度会减少。每个“TEXT”值都使用一个两字节长度前缀存储,指示值中的字节数。
可以为此类型提供可选长度M。如果这样做,MySQL将创建足以容纳M个字符长的值的最小“TEXT”类型列。
表面上,“text”和“varchar”似乎是相同的,因为它们对于字符串具有相同的存储容量,但经过进一步研究后,我发现以下thread,它表明MySQL在处理索引和创建临时表时不同地处理这两个列,这两者都会影响查询性能。
如果您不打算对存储的数据进行任何查询,请考虑使用NoSQL解决方案,如MongoDB

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