我需要将一组数据保存到 MySQL。但是数组的长度不是固定的。
该数组可能类似于:
array(key1 => value1)
或喜欢
array(key1 => value1, key2=> value2)
等等。
如果它是一个固定长度的数组,那么 JOIN 可以解决这个问题。我正在考虑将其保存为 JSON 字符串
数据表如下:
id -- context -- content (JSON Str)
这是一个好主意吗?有没有更好的方法来做到这一点?
谢谢
您可能需要考虑一个单独的表,这样以后查询起来会容易得多。
data [table]
- id
- context
data_items [table]
- data_id [foreign_key]
- key
- value
在数组中插入尽可能多的 data_items 记录,链接到一个数据记录。
是的,将数组数据存储在 JSON 中是个好主意。序列化更便携,并且根据我的经验,它更擅长处理 UTF-8 字符。
FTR 我通常尽量不在数据库中存储大量“内容”数据,而是选择像 MongoDB 这样的针/干草堆文件存储。
如果您确实知道不需要访问 json 字符串中的任何数据,并且您永远不会尝试根据此信息访问任何行,那么将其存储为 json 字符串可能会起作用。
通常使用第二个表来规范化数据是一个更好的主意。或者切换到 NOSQL 数据库解决方案。
您当然可以以 PHP 的序列化格式或 JSON 等序列化格式存储序列化数据。我唯一的问题是您是否需要访问此序列化数组中的任何数据(即查询此数据)。如果您总是要查询某种 id,这应该可以正常工作。但是,如果您需要实际处理数据库中的数据,您可能需要考虑使用 NoSQL 解决方案来处理非结构化数据。