2013-03-28 82 views
0

我需要將一組數據保存到MySQL。但是陣列的長度不固定。用PHP保存JSON到mySQL

該陣列可以是這樣的:

array(key1 => value1) 

或類似

array(key1 => value1, key2=> value2) 

等。

如果它是一個固定長度的數組,那麼JOIN可以解決這個問題。 我正在考慮將其保存爲一個JSON字符串

數據表是這樣的:

id -- context -- content (JSON Str) 

這是一個好主意?有沒有更好的方法來做到這一點?
謝謝

回答

3

您可能需要考慮一個單獨的表格,以後查詢會更容易。

data [table] 
- id 
- context 

data_items [table] 
- data_id [foreign_key] 
- key 
- value 

插入多達data_items記錄,你有一個數組,鏈接到一個數據記錄。

+1

這是一個非常好的主意,絕對整潔。 – UnLoCo 2013-03-28 00:59:48

+0

此外,還需要另一個表作爲上下文和密鑰之間的中介,以便能夠確定哪個密鑰屬於哪個行。 – UnLoCo 2013-03-28 04:38:11

+1

這不應該是必要的,data_id已經提供了。如果你努力把它放在一起,用一些需要組織的示例數據發佈一個新問題。 – jszobody 2013-03-28 10:56:18

1

是的,將數組數據存儲在JSON中是個好主意。序列化更容易,而且根據我的經驗,更好地處理UTF-8字符。

FTR我通常儘量不要在數據庫中存儲大量的「內容」數據,但可以選擇像MongoDB這樣的針頭/乾草堆文件存儲。

+0

可移植性不是問題。 UTF-8不是問題。在任何情況下,無論使用或不使用JSON字符串,兩者都可能出錯。 – Sven 2013-03-28 00:26:29

+0

如果使用非PHP代碼訪問「內容」數據,則可移植性可能成爲問題。正如我在我的文章中提到的,根據我的經驗,在處理utf-8字符比序列化更好。 OP沒有提及哪種類型的數據將被存儲在數組中,這是令人困惑的,B/C其他人假定數據庫正常化,我假定數據存儲。 – 2013-03-28 00:31:44

+1

好吧,另一種方法是正確地將數據存儲在多行中,並通過ID引用連接它們。這將適用於任何編碼,任何編程語言。 – Sven 2013-03-28 00:34:14

1

如果您確實知道您不需要訪問json字符串中的任何數據,並且您將永遠不會嘗試根據此信息訪問任何行,那麼將其存儲爲json字符串可能會有效。

通常使用第二個表對數據進行規範化是個好主意。或切換到NOSQL數據庫解決方案。

1

您當然可以將序列化數據存儲爲序列化格式,如PHP的序列化格式或JSON。我唯一的問題是你是否需要訪問這個序列化數組中的任何數據(即查詢這個數據)。如果你總是要查詢某種id,這應該可以正常工作。但是,如果您需要實際處理數據庫中的數據,則可能需要考慮使用NoSQL解決方案來處理非結構化數據。