【问题标题】:Questions about types in MySQL关于 MySQL 类型的问题
【发布时间】:2010-01-18 03:04:49
【问题描述】:

所以我正在为 cmets 创建一个表,我想知道。什么是评论细节的好类型?我放了长文。那么,如果 longtext 可以处理它,为什么人们需要 varchar 呢?另外,我需要哪种类型的用户名?

索引的“主要”目的是什么?索引的目的是什么?

更新: 假设评论实际上是评论。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    TEXT 确实可以处理您放在 VARCHAR 或 CHAR 字段中的任何输入。事实上,TEXT 可以处理您可能想要放入 DECIMAL、INT 或几乎任何其他类型的数据。按照这个逻辑,我们不妨把每一列都设为 TEXT 类型。

    但这将是一个错误。为什么?因为为预期输入使用适当的列类型可以让数据库更好地优化查询、使用更少的磁盘空间并使数据模型更易于理解和维护。

    关于问题:用户名列应使用 VARCHAR(20),因为您希望并期望大多数用户名会变短,通常不超过 10 到 20 个字符。对于评论栏(如电影评论或书评),TEXT 类型将是合适的,因为评论可以跨越单个段落到几页。

    关于索引,试试这个链接:

    http://20bits.com/articles/interview-questions-database-indexes/

    【讨论】:

      【解决方案2】:

      这取决于您的系统中的“评论”是什么。通常 VARCHAR 对于 cmets 和用户名都是相当标准的。这将您限制为大约 255 个字符,这通常是可以接受的。如果您在 cmets 中需要更多字符,可以将其添加到文本中,这样可以得到超过 65k 的字符。

      有关详细信息,请参阅String Types Reference

      【讨论】:

      • 我如何知道哪种类型允许使用哪些字符?那么,当 longtext 与其功能重叠时,为什么需要 varchar 呢?我敢肯定世界上有很多东西都是这样运作的,但我只是想进一步挖掘,看看是否有什么特殊原因让我失踪了。
      • 在评论或用户名中使用长文本就像是在水枪大战中使用火箭筒。
      【解决方案3】:

      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 字节,在 所有列)和字符集 用过。

      更多信息:http://dev.mysql.com/doc/refman/5.0/en/blob.html

      【讨论】:

        【解决方案4】:

        看看这个web page,它列出了所有 MySQL 字段类型并描述了它们是什么以及它们之间的不同之处。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-05
          • 2011-11-04
          • 2011-05-14
          • 2017-09-29
          • 2013-03-07
          • 1970-01-01
          • 1970-01-01
          • 2019-11-30
          相关资源
          最近更新 更多