2013-03-14 28 views
15

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

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

id INT(11) 
data VARCHAR(128) 

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

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

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

+1

使用longtext数据类型.. – Dhinakar 2013-03-14 10:11:05

+0

你想实现什么? – sectus 2013-03-14 10:12:04

+0

了解您打算如何处理这些数据非常重要,您是否通过查询来操纵它,或者只是存储和检索整个数据? – Steve 2013-03-14 10:20:17

回答

18

一般来说,这不是一个有“正确”答案的问题。 MySQL中没有“无限长度”文本存储类型。你可以使用LONGTEXT,但仍然有一个(荒谬的高)上限。然而,如果你这样做,那么你就不得不面对你的数据库管理系统,因为你不得不为50个字符的文本处理这个荒谬的列。更何况你几乎没有做任何事情。

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

如果我想在“应用程序设计”级别上解决这个问题,我会使用NoSQL键值存储(因为它是反NoSQL炒作,所以你知道它是严重),尽管我认识到这样一个小变化是一个相当昂贵的变化。但是,如果这表明您的数据库管理系统最终会保留什么,那么现在就可以更谨慎一些,以避免将来再次发生同样的问题。数据域在RDBMS中非常重要,但它在非关系型解决方案中显然是旁观的,这似乎是您要在这里解决的问题。

卡住MySQL吗?只需将其增加到VARCHAR(1000)即可。如果您对数据没有任何要求,则无论如何您都无关紧要。

+0

请注意,如果只有500个字符,“TEXT”就可以正常工作。 – 2015-02-15 00:16:02

+1

'TEXT'对于“只有”500个字符都很重要,OP也不知道500是否是上限。答案取决于你使用的是MyISAM还是InnoDB,但是对于文本可以快速访问的列,'VARCHAR'速度更快,因为它将内联数据存储起来(InnoDB同时存储'TEXT',直到行长限制2^16)。所以,取决于应用,但是如果你不能在列长度上设置一个稳定的上限,'TEXT'总是会更好。 – Naltharial 2015-02-15 15:53:09

+0

同意,@Naltharial。只是想确保'LONGTEXT'的建议不是'TEXT'的唯一参考 - 而不是'LONGTEXT','TEXT'可能会更多地在OP的可能解决方案领域,尽管真正的解决方案是希望收紧这些要求。 – 2015-02-17 23:20:34

相关问题