【发布时间】:2010-01-18 03:04:49
【问题描述】:
所以我正在为 cmets 创建一个表,我想知道。什么是评论细节的好类型?我放了长文。那么,如果 longtext 可以处理它,为什么人们需要 varchar 呢?另外,我需要哪种类型的用户名?
索引的“主要”目的是什么?索引的目的是什么?
更新: 假设评论实际上是评论。
【问题讨论】:
标签: mysql
所以我正在为 cmets 创建一个表,我想知道。什么是评论细节的好类型?我放了长文。那么,如果 longtext 可以处理它,为什么人们需要 varchar 呢?另外,我需要哪种类型的用户名?
索引的“主要”目的是什么?索引的目的是什么?
更新: 假设评论实际上是评论。
【问题讨论】:
标签: mysql
TEXT 确实可以处理您放在 VARCHAR 或 CHAR 字段中的任何输入。事实上,TEXT 可以处理您可能想要放入 DECIMAL、INT 或几乎任何其他类型的数据。按照这个逻辑,我们不妨把每一列都设为 TEXT 类型。
但这将是一个错误。为什么?因为为预期输入使用适当的列类型可以让数据库更好地优化查询、使用更少的磁盘空间并使数据模型更易于理解和维护。
关于问题:用户名列应使用 VARCHAR(20),因为您希望并期望大多数用户名会变短,通常不超过 10 到 20 个字符。对于评论栏(如电影评论或书评),TEXT 类型将是合适的,因为评论可以跨越单个段落到几页。
关于索引,试试这个链接:
http://20bits.com/articles/interview-questions-database-indexes/
【讨论】:
这取决于您的系统中的“评论”是什么。通常 VARCHAR 对于 cmets 和用户名都是相当标准的。这将您限制为大约 255 个字符,这通常是可以接受的。如果您在 cmets 中需要更多字符,可以将其添加到文本中,这样可以得到超过 65k 的字符。
有关详细信息,请参阅String Types Reference。
【讨论】:
TEXT NOT NULL。这提供了足够的空间,有 2 字节的开销,并且通常不会出现问题。
关于文本
比较时,TEXT 是空间扩展的 完全适合被比较的对象 比如 CHAR 和 VARCHAR。
对于 BLOB 和 TEXT 列的索引, 您必须指定索引前缀 长度。对于 CHAR 和 VARCHAR,前缀 长度是可选的。见第 7.4.2 节, “列索引”。
BLOB 和 TEXT 列不能有 默认值。
如果您将 BINARY 属性与 TEXT数据类型,列赋值 列的二进制排序规则 字符集。
关于 VARCHAR:
VARCHAR 列中的值是 变长字符串。长度 可以指定为从 0 到 在 MySQL 5.0.3 之前为 255,在 MySQL 5.0.3 之前为 0 5.0.3 及更高版本中为 65,535。 有效最大长度 MySQL 5.0.3 及更高版本中的 VARCHAR 是 受最大行大小限制 (65,535 字节,在 所有列)和字符集 用过。
【讨论】:
看看这个web page,它列出了所有 MySQL 字段类型并描述了它们是什么以及它们之间的不同之处。
【讨论】: