【问题标题】:MySQL best way to store long stringsMySQL 存储长字符串的最佳方式
【发布时间】:2013-03-02 15:02:13
【问题描述】:

我正在向 mySQL 专家寻求一些关于存储长字符串数据的最佳方式的建议。

我有一个通用表,用于存储任何类型的数据,我的意思是它应该能够保存字母数字和数字数据。 目前,表结构很简单,只有一个ID,实际数据存储在一个列中,如下所示:

id INT(11)
data VARCHAR(128)

我现在需要存储大量数据(最多 500 个字符),我想知道最好的方法是简单地增加 varchar 列大小,还是应该添加一个新列(TEXT 类型列?),因为我需要存储更长的字符串。

如果有任何专家有任何建议,我会全力以赴! 我的首选方法是简单地增加 varchar 列,但那是因为我很懒。 我运行的 mySQL 版本是 5.0.77。

我应该提一下,新的 500 个字符要求仅适用于奇数记录;表中的大多数记录不会超过 50 个字符。 我以为我会通过制作第 128 列来适应未来。显示我知道多少!

【问题讨论】:

  • 使用长文本数据类型..
  • 你想达到什么目的?
  • 了解您打算如何处理这些数据非常重要,您是通过查询来操作它还是只是存储和检索全部数据?
  • 感谢您的回复,关于我如何处理数据,我只是存储和检索全部金额
  • longblob = 例如,如果您存储 PDF,没有字符集可能会更好 - 同样创建一个只有一个表的数据库在某些时候会变得很糟糕,因为您必须编写自己的数据库系统周围。这有点违背了数据库系统的想法。

标签: mysql


【解决方案1】:

一般来说,这不是一个有“正确”答案的问题。 MySQL 中没有“无限长”文本存储类型。你可以使用LONGTEXT,但这仍然有一个(高得离谱的)上限。然而,如果你这样做了,你的 DBMS 就会因为不得不为你的 50 个字符的文本处理一列荒谬的 blob 而大吃一惊。更不用说你几乎没有用它做任何事情。

因此,LONGTEXT 可能提供了大多数 futureproofness(TM)。但这也是解决问题的一种非常糟糕的方法。老实说,我会重新审视申请要求。存储没有“域”(如在应用程序中定义良好)和任意长度的字符串并不是 RDBMS 的优势之一。

如果我想在“应用程序设计”级别解决这个问题,我会为此使用 NoSQL 键值存储(而且我和他们一样反对 NoSQL 炒作,所以你知道这很严重),尽管我承认对于这样一个微小的改变来说这是一个相当昂贵的改变。但是,如果这表明您的 DBMS 最终将持有什么,那么现在切换可能会更谨慎,以避免未来数百次出现同样的问题。数据域在 RDBMS 中非常重要,而在非关系解决方案中它被明确排除在外,这似乎是您在此处尝试解决的问题。

卡在 MySQL 上?只需将其增加到VARCHAR(1000)。如果您对您的数据没有任何要求,那么无论如何您所做的一切都无关紧要。

【讨论】:

  • 请注意,如果只有 500 个字符,TEXT 可以正常工作。
  • TEXT 对于“仅”500 个字符来说很重,而且 OP 也不知道 500 是否是上限。答案取决于您使用的是 MyISAM 还是 InnoDB,但对于可快速访问文本的列,VARCHAR 更快,因为它内联存储数据(InnoDB 还内联存储 TEXT 到行长度限制,2^ 16)。因此,取决于应用程序,但如果您不能为列长度设置一个稳定的上限,TEXT 只会更好。
  • 同意,@Naltharial。只是想确保LONGTEXT 的建议不是此处对TEXT 的唯一引用——而不是LONGTEXTTEXT 可能更多地属于 OP 的可能解决方案领域,尽管真正的解决方案是希望收紧要求。
  • 它可能与谁有关 - 请不要无故编辑答案。 VARCHAR 限制受行长度和字符编码的影响。同样,不要添加或删除会改变答案本身含义的词。
【解决方案2】:

使用文本时要小心。 TEXT 数据不存储在数据库服务器的内存中,因此,每当您查询 TEXT 数据时,MySQL 都必须从磁盘中读取,这与 CHAR 和 VARCHAR 相比要慢得多,因为它不能使用索引。更好的方法存储长字符串将是 nosql 数据库

【讨论】:

    【解决方案3】:

    我们可以使用varchar(<maximum_limit>)。我们可以通过的最大限制是 65535 字节。

    注意:VARCHAR 的最大长度在除 TEXT/BLOB 列和使用的字符集之外的所有列之间共享。

    【讨论】:

      猜你喜欢
      • 2011-10-19
      • 2010-12-15
      • 2012-10-16
      • 2016-06-18
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多