Json在mysql中存储设置?

时间:2014-09-20 13:34:43

标签: php mysql sql json

有人可能会告诉我,如果在数据库中使用json(数组)来存储设置或首选项是一种常见做法。是否有任何陷阱?

4 个答案:

答案 0 :(得分:1)

您可以使用varchar()字段将JSON存储在MySQL(或任何其他数据库)中,以用于序列化格式。

执行此操作时,您将失去在表中存储数据的灵活性,因为数据库无法理解JSON对象中的不同“列”。通过检索用户的记录并解析JSON(可能在应用程序级别),您可以相对轻松地获得单个用户的首选项。但是,有效地提出诸如“有多少用户有选择权”之类的问题变得更加困难。

某些数据库本身支持JSON(例如自9.2版以来的Pos​​tgres)。在MySQL中,您可以获得具有类似功能的函数库(here是一个任意示例)。

如果您只有少数已知的首选项不会更改,那么创建一个表格,每个表格都有一列。如果您有许多首选项,并且用户可能只有一个子集,那么每个首选项可以存储一行。这样的UserPreferences表将包含以下列:

  • 用户ID
  • 首选项名称
  • 偏好值

这是一种实体属性值(EAV)数据存储。这具有能够轻松添加新偏好的灵活性。数据库还可以利用索引和其他技术来提高性能。但是,这种结构不如JSON灵活。

答案 1 :(得分:0)

你可以使用像MongoDB这样的基于JSON的数据库,然后它就是

答案 2 :(得分:0)

PHP中的Doctrine ORM 2还允许在DB中存储json:

  

json_array:使用将SQL CLOB映射到PHP数组的类型   json_encode()和json_decode()

参考:http://doctrine-orm.readthedocs.org/en/latest/reference/basic-mapping.html

如果你需要它,那就完全没问题了!

答案 3 :(得分:0)

https://dba.stackexchange.com/

可能会更好地提出问题

话虽如此,根据我的经验,将json存储在nosql数据库中是很常见的。对于sql数据库,您需要将列声明为具有固定大小的varchar。你可以使它非常大以容纳大型json(当你有一个小的json字符串时会发生什么)。你可以选择使字段变小(当你有一个大的json字符串时会发生什么)。你可以看到这对于存储任意json是多么糟糕。如果您的json不是任意的,那么您应该在表中创建特定字段。

如果它是json字符串,还要考虑如何查询数据。