2011-09-02 52 views
0

在MySQL數據庫中,我發現一些數據存儲象下面這樣:爲什麼在MySQL存儲數據這樣的:6:{S:5: 「標題」; S:43:}

一個:6: {S:5: 「標題」; S:43: 「fgjfh」; S:8: 「省」; S:6: 「重慶」; S:4: 「城市」; S:9: 「大渡口」; s:8:「location」; s:6:「fhfghf」; s:9:「starttime」; s:11:「09-02 12:00」; s:7:「endtime」; s:11: 「09-02 16:00」;}

+3

至於**爲什麼**;我們只能推測。但基本上數據庫被用作文檔存儲。如果數據庫永遠不需要使用包含的字段,則序列化的數據blob是合適的。然後避免分開的表/行的額外管理開銷有時是受歡迎的。 – mario

+0

@mario我想upvote這個,但你沒有發佈它作爲一個答案 – ZJR

回答

6

這是一個PHP serialized數組。您在將數組放入數據庫之前將其序列化。

如果要更改它,請在代碼中查找serialize($value)調用。

更新:

也許你的存儲數據(這是一個哈希實際上)具有動態的領域,這是太困難的創建者或他/她不在乎/懶做所以/決定這不重要,或者僅僅是這不是用例。

但是你應該考慮重新考慮你的模式並創建一個正確的(3NF)normalization。在這種情況下,你將有至少一個表可以是這樣:

CREATE TABLE data (
    id   INTEGER PRIMARY KEY, -- or SERIAL if your database supports it 
    title  VARCHAR,    -- or TEXT 
    province_id INTEGER NOT NULL, -- or REFERENCES the provinces table 
    city_id  INTEGER NOT NULL, -- or REFERENCES the cities table 
    location VARCHAR,    -- I do not really know what is this field 
    starttime TIMESTAMP, 
    endtime  TIMESTAMP 
); 

當然,你則需要在provincescities表也是如此。使用這種模式,如果需要,可以使用數據庫指令處理存儲的數據。

+1

這是,請記住,最可怕的想法*永遠*。你能否詳細解釋一下 – Charles

+0

?爲什麼不直接存儲數據? – dayulu

+0

@Charles,它爲什麼是可怕的想法,如果它不打算用於查詢搜索?例如在緩存中。 –

相關問題