将其他数据存储在DB表行中

时间:2012-05-14 15:46:15

标签: mysql sql database row separator

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

我最初的想法是以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使用分隔符正确地展开行文本后,通过PHP获得具有相应键和值的数组。

3 个答案:

答案 0 :(得分:2)

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

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

如果是跨平台,JSON可能是一种方法:对于像所有环境那样的东西,存在良好的JSON编码/解码库。对于XML来说也是如此,但在他的上下文中,XML的文本开销会有点不尽相同。

旁注:您确定,将数据存储在附加表中的速度较慢吗?您可能希望在最终决定之前对其进行基准测试。

修改

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

答案 1 :(得分:1)

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

请记住,如果您需要在此字段中搜索任何内容,那么您将不得不使用SQL LIKE。如果您从不需要搜索此字段或将其加入任何内容,我认为没问题,但如果您这样做,那么您已经完全抛出了窗外的效果。

答案 2 :(得分:-1)

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

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

如果不是那样的话,请给出你的sql示例,我们可以看看如何做到这一点。