27

我正在从 mySQL 专家那里寻找一些关于存储长字符串数据的最佳方法的建议。

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

id INT(11)
data VARCHAR(128)

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

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

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

4

3 回答 3

33

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

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

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

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

于 2013-03-14T11:31:01.820 回答
2

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

于 2019-09-04T10:18:57.217 回答
2

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

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

于 2021-03-28T17:40:28.733 回答