我对mysql有疑问。我的字段可以很容易地限制为某些字符,例如姓氏,而其他字段则像带有事件的迷你日志,我认为它不再是 2 页(或更少的字符)。我知道这是一个相当普遍的问题,我看到很多关于这个的链接,但我看不出有什么区别和正确的方法。
以下是我的结论和疑问,如果我错了,请纠正我:
- varchar是一个变量类型,我设置 varchar(10) 还是 varchar(65535) 都没有关系,虽然不是相同的 65536,它传递给中等文本。-varchar 与一个或其他参数相同,只占用必要的空间,它只是保存的限制和表示的限制。
-如果我在我的应用程序一侧进行限制,它完全相同并且更灵活。
-text 是固定长度的,如果我设置 text 它将占用 65535,无论我是否使用它。
varchar
- 它有一个重载,必须首先找到字段的长度。
- 它在保存长度的地方多了一个字节的成本。
- 它是内联保存的,这意味着在表格中。
- 它始终具有更好的性能。
text
- 它存储在表格之外,有一个指向我的文本的指针,是真的吗?
- 它有固定数量的字符。
- 在 varchar 和 text 中设置的长度是字符,而不是字节(以前的版本不同)
结论:
- 由于这些原因,最好始终使用 varchar,只有一种情况不正确,即我确切地知道字符数。
所有其他最常见的情况,最好使用最长的 varchar,因此它适用于名称或姓氏(虽然我可以将其限制为文本(35),但我不知道名称是否是“Tom”或“Federico Guillermo Rodrigo Cayetano”),对于字段事项或描述(更多变量),或者更大的文本,如迷你日志,可以从 0 到 3 页字符(在我的情况下) ,但我们可以把它带到一个极端,比如 0 到 16 页文本,大约 65535 个字符)。这是正确的,特别是如果我们不知道未来的需求,比如最长的描述,如果我们限制表空间,需求的改变可能是一个难题。
最后,像一个奖励:),如果文本超过 65535 个字符但谁可以变化,会发生什么情况?将其设置为中等文本或长文本是否合理,如果它可以变化?