在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」;}
在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」;}
這是一個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
);
當然,你則需要在provinces
和cities
表也是如此。使用這種模式,如果需要,可以使用數據庫指令處理存儲的數據。
至於**爲什麼**;我們只能推測。但基本上數據庫被用作文檔存儲。如果數據庫永遠不需要使用包含的字段,則序列化的數據blob是合適的。然後避免分開的表/行的額外管理開銷有時是受歡迎的。 – mario
@mario我想upvote這個,但你沒有發佈它作爲一個答案 – ZJR