2013-03-14 26 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

相關問題