0

假设我需要在数据库表中存储一些未知数量的数据。我不想创建额外的表,因为这将花费更多时间来获取数据。数据量可以不同。

我最初的想法是以某种格式存储数据,但这里的问题是它的主体中key1=value1;key2=value2;key3=value3可以包含一些值。;在这种情况下,最好的分隔符是什么?我可以使用哪些其他方法来将各种数据存储在一行中?

行的示例内容就像data=2012-05-14 20:07:45;text=This is a comment, but what if I contain a semicolon?;last_id=123456在使用分隔符正确分解行文本后,我可以从中通过 PHP 获得一个具有相应键和值的数组。

4

3 回答 3

2

首先:如果您需要单独访问它们或通过其中一个进行搜索,您永远不会在一个字段中存储多个信息。这已经在这里讨论过很多次了。

假设您都想一次访问完整的信息集合,我建议使用您的开发环境的本机序列化格式:例如,如果是 PHP,则使用serialze().

如果它是跨平台的,JSON 可能是一种可行的方法:良好的 JSON 编码/解码库适用于所有环境。XML 也是如此,但在他的上下文中,XML 的文本开销会有点小。

旁注:您确定将数据存储在其他表中会更慢吗?您可能希望在最终决定之前对其进行基准测试。

编辑:

阅读后,您使用 PHP:如果您不想将其放在表格中,请坚持使用serialize()/unserialize()MEDIUMTEXT字段,这非常有效,我一直这样做。

于 2012-05-14T15:52:45.260 回答
1

EAV ( cringe ) 可能是存储任意值的最佳方式,但无论出于何种原因,听起来您都坚决反对附加表。鉴于此,您可以将 json_encode 的结果保存在表中。当您读回它时,只需 json_decode 将其放回数组中。

请记住,如果您需要在此字段中搜索任何内容,您将不得不使用 SQL LIKE。如果您不需要搜索此字段或将其加入任何内容,我想没关系,但如果您这样做,您就完全将性能抛到了窗外。

于 2012-05-14T16:17:01.173 回答
-1

它可以是分隔它们的引号。

key1='value1';key2='value2';key3='value3' 

如果不是这样,请给出您的 sql 示例,我们可以看看如何去做。

于 2012-05-14T15:54:19.750 回答