以下摘录来自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。
SQL Server
,但我想象MySQL
总有一天也会走同样的路线。不要把这当作普遍建议,我很想知道社区对此有何看法,并希望有经验的人能发表意见。 - Lieven Keersmaekersxml
和jdbc
标签?我要存储 XML 并使用 JDBC 访问数据库,所以我对这个特定领域的实践特别感兴趣。 - Ivan