【发布时间】:2018-10-27 09:35:31
【问题描述】:
如何匹配整个 MySQL JSON 列的内容?
例如
SELECT COUNT(id) as matches
FROM my_table
WHERE my_table.settings = '{ "color": "red", "location": "Australia", "flavour": "cheese" }'
其中 settings 是 JSON 列类型。问题是当我在字段中存储 JSON 时,键的排列方式不同。
上面会产生matches === 0,而实际上有很多匹配项。
【问题讨论】:
-
我知道 MySQL 现在支持 JSON,但老实说,将序列化数据(这就是 JSON)存储在单个列中仍然不是一个好主意,因为从仅包含 SQL 的序列化列令人头疼。是否可以重构您的数据库架构,以便可以以更容易查询的方式存储这些数据(例如额外的颜色、位置和风味列,或者作为依赖表中的键和值)?
-
不 - 是的 - 虽然适应非常频繁变化的方案的成本更高
-
也许值得考虑使用不同的非 SQL 数据库?像 Mongo 或 Couch 之类的东西?
-
再一次,与将实际解决方案(见下文)与我们的 ACTUAL 主存储引擎集成在一起相比,运营开销几乎不值一提。您能认真地想象仅仅因为一张表上的一列而迁移整个应用程序吗?我的朋友是荒谬的本质。
标签: php mysql json laravel database-design