2011-09-02 61 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,它为什么是可怕的想法,如果它不打算用于查询搜索?例如在缓存中。 –

相关问题