MySQL存储长字符串的最佳方式

Dam*_*ian 16 mysql

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

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

id INT(11)
data VARCHAR(128)
Run Code Online (Sandbox Code Playgroud)

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

如果有任何专家有任何建议我都听见了!我首选的方法是简单地增加varchar列,但这是因为我很懒.我正在运行的mySQL版本是5.0.77.

我应该提到新的500字符要求只适用于奇数记录; 表中的大多数记录不会超过50个字符.我认为通过制作第128列我会做到面向未来.显示我知道多少!

Nal*_*ial 19

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

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

如果我想在"应用程序设计"级别上解决这个问题,我会使用NoSQL键值存储(并且我会像他们那样反对NoSQL-hype,所以你知道它很严重),甚至虽然我认识到这种微小变化是一个相当昂贵的变化.但是,如果这表明您的DBMS最终会持有什么,那么现在切换以避免同样的问题可能会更加谨慎.数据域在RDBMS中非常重要,而在非关系解决方案中它显然处于边缘状态,这似乎是您在此尝试解决的问题.

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

  • `TEXT` 对“仅”500 个字符来说很重,而且 OP 也不知道 500 是否是上限。答案取决于您使用的是 MyISAM 还是 InnoDB,但对于可快速访问文本的列,`VARCHAR` 更快,因为它内联存储数据(InnoDB 也内联存储 `TEXT` 行长度限制,2^ 16)。因此,取决于应用程序,但如果您不能对列长度设置稳定的上限,`TEXT` 只会永远更好。 (2认同)
  • 它可能与谁有关 - 请不要无故编辑答案。VARCHAR 限制取决于行长度和字符编码。同样,不要添加或删除会改变答案本身含义的词。 (2认同)

小智 7

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

\n