在数据库中保存和编辑数组的最佳方法是啥(json、序列化或文本)

Posted

技术标签:

【中文标题】在数据库中保存和编辑数组的最佳方法是啥(json、序列化或文本)【英文标题】:What is the best way to save and edit array in database (json, serialize or text)在数据库中保存和编辑数组的最佳方法是什么(json、序列化或文本) 【发布时间】:2019-01-03 06:30:44 【问题描述】:

我想向我的客户添加信息,例如他们有权执行的操作数量

我在另一个post 上看到我们可以使用serialize()json_encode() 函数将数组保存在数据库中

但为什么不直接保存成这样的文本格式["view", "edit", "delete", "save"]

使用 json 和 serialize 函数,如何添加或删除数据? 例如使用 json_encode,我必须创建一个数据 json_decode() 并创建一个 unset()array_push() 然后 json_encode()?还是有更好的方法?

【问题讨论】:

“但是为什么不直接保存成这样的文本格式”——嗯,JSON或者serialize产生的php格式都是文本可以轻松地与原生 PHP 数组相互转换的格式……因此,您可以使用数组函数操作 PHP 数组并将结果存储到文本中或从文本中存储结果。我不清楚我/你在这里错过了什么……? 所以你应该考虑修改你的数据库设计并将这些数据保存在一个单独的表中,其中的项目链接到拥有的信息。在继续之前尝试几个database design tutorials “更好”有点主观,在某种程度上取决于您的业务需求。你说“为什么不直接以文本格式保存它:[“view”、“edit”、“delete”、“save”]”......但实际上你给出的例子是有效的 JSON,因为它发生了。 JSON一种文本格式。这是一个很好理解的,具有现成的序列化和反序列化功能。当你自己的文本格式运行良好时,我认为没有任何意义。但您也可以考虑创建一个适当的关系表结构来存储您的数据是否是以后查询数据的更好方法。 【参考方案1】:

我在另一篇文章中看到我们可以使用 serialize() 或 json_encode() 函数将数组保存在数据库中

这并不完全准确。您可以使用这些函数将数组转换为字符串。然后,您可以将字符串保存在数据库字段中。

这不是一个好主意™,因为这意味着您无法明智地搜索数组中的数据。您应该利用数据库的关系特性并建立一个真实的(例如many-to-many)关系。

但是为什么不直接保存成这样的文本格式:["view", "edit", "delete", "save"]?

因为数组不是文本格式(如果是文本,那么这就是json_encode 会给你的输出)。

使用json和serialize函数,如何添加或删除数据?例如使用 json_encode,我必须创建一个数据 json_decode() 并创建一个 unset() 或 array_push() 然后 json_encode()?

是的

或者有更好的方法吗?

参见前面关于关系的说明。

【讨论】:

以上是关于在数据库中保存和编辑数组的最佳方法是啥(json、序列化或文本)的主要内容,如果未能解决你的问题,请参考以下文章

保存可以在android应用程序的所有活动中访问的数组的最佳方法是啥?

存储数据列表并自动分配给结构的最佳方法是啥

将不同长度的numpy数组保存到同一个csv文件的最佳方法是啥?

将json字符串转换为对象数组的最佳方法是啥? [复制]

保存游戏状态的最佳方法是啥?

将数组内容保存/加载到文件的最佳方法是啥?