在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