MySQL:大VARCHAR与TEXT?

我在MySQL中有一个消息表,它记录用户之间的消息。 除了典型的ID和消息类型(所有整数类型)之外,我需要将实际的消息文本保存为VARCHAR或TEXT。 我设置了3000个字符的前端限制,这意味着消息永远不会被插入到数据库中,因为它比这更长。

使用VARCHAR(3000)还是TEXT有理由吗? 有一些关于写VARCHAR(3000)的感觉有些违反直觉。 我已经通过堆栈溢出的其他类似的帖子,但会很好地获得特定于这种类型的常见消息存储的视图。


TEXT和BLOB存储在表格外,表格只有一个指向实际存储位置的指针。

VARCHAR与表内联存储。 当尺寸合理时,VARCHAR会更快,其折衷取决于您的数据和硬件,因此您希望使用您的数据对实际场景进行基准测试。


你能预测用户输入需要多长时间吗?

VARCHAR(X)

案例:用户名,电子邮件,国家,主题,密码


文本

案例:消息,电子邮件,评论,格式化文本,html,代码,图像,链接


MEDIUMTEXT

案例:大型json机构,短至中等长度的书籍,csv字符串


LONGTEXT

案例:教科书,程序,多年的日志文件,哈利波特与火焰杯,科学研究日志


只是为了澄清最佳做法:

  • 文本格式的消息应该几乎总是作为TEXT存储(它们最终会变得很长)

  • 字符串属性应该存储为VARCHAR(目标用户名,主题等)。

  • 我知道你有一个前端限制,这很好,直到它不是。 *咧嘴*诀窍是将数据库视为与连接到它的应用程序分开。 仅仅因为一个应用程序对数据设置了限制,并不意味着数据本质上是有限的。

    这些信息本身是什么使得它们不会超过3000个字符? 如果它只是一个任意的应用程序约束(例如,对于文本框或其他内容),请在数据层使用TEXT字段。

    链接地址: http://www.djcxy.com/p/58955.html

    上一篇: MySQL: Large VARCHAR vs. TEXT?

    下一篇: PHP combining arrays