0

我对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 个字符但谁可以变化,会发生什么情况?将其设置为中等文本或长文本是否合理,如果它可以变化?

4

1 回答 1

0

我认为您的假设并不完全正确,并且可能过于偏执或受到不再有效的历史问题的影响。

通常最好使用它,VARCHAR因为 MySQL 和其他数据库引擎已经过优化,可以很好地处理它们。从历史上看(1990 年代),在使用具有固定长度行的表与可变长度的表时存在显着的性能差异,但今天这已经无关紧要了。

同样,TEXT列过去的所有数据都存储在主表数据的外部。现在我相信使用了一种混合方法,如果需要,前 N 个字符存储在行中,其余字符存储在 BLOB 系统中。定义为变长,单个字符不使用65535字节来存储。

您需要使用LONGTEXT更大的文本块,但此时您应该评估您是否正确使用数据库。在其中存储、检索和操作巨大的物体可能会很麻烦。

默认情况下,我会使用VARCHAR(255)任何“文本”,并在必要时将其延长更长的时间。除了非常狭窄的情况外,缩短通常是有问题的,例如您存储的 ISO 国家/地区代码,根据定义,该代码将是两个字符。

假设名称“不超过 32 个字符”几乎总是一个错误的假设。除非您有充分的理由不这样做,否则请敞开这些大门。

你可能认为城市或地名之类的东西也很短,但你错了。世界是一个陌生的地方。期待意外。

于 2016-01-11T21:20:08.393 回答