php怎么把一个一个数据存为数组,php – Mysql:将数据数组存储在一个列中

首先,你真的不想那样做. RDBMS中的列意味着是原子的,因为它包含一条且只有一条信息.尝试在列中存储多个数据是违反第一范式的.

如果绝对必须这样做,那么您需要将数据转换为可以存储为单个数据项(通常是字符串)的表单.您可以使用PHP的serialize()机制,XML解析(如果数据恰好是文档树),json_encode()等.

但是,您如何有效地查询这些数据?答案是你不能.

此外,如果其他人在以后接管你的项目,你真的会惹恼他们,因为数据库中的序列化数据是可怕的.我知道因为我继承了这样的项目.

我提到你真的不想那样做吗?您需要重新考虑您的设计,以便更容易按原子行存储.例如,对该数据使用另一个表,并使用外键将其与主记录相关联.他们被称为关系数据库是有原因的.

更新:我被问及数据存储要求,就像单行是否会在存储方面更便宜一样.答案是,在典型的情况下不是没有,如果答案是肯定的,你支付的价格就不值得支付.

如果使用2列依赖表(1列用于样本所属记录的外键,一列用于单个样本)则每列最多需要16个字节(对于longint键列为8个字节,8个字节)对于双精度浮点数).对于100个记录,即1600字节(忽略数据库开销).

对于序列化字符串,最好在字符串中每个字符存储1个字节.你不知道这个字符串会有多长,但是如果我们假设100个样本的所有存储数据都是由一些设计的巧合全部落在10000.00和99999.99之间,而小数点之后只有2位数,那么你’重新查看每个样本8个字节.在这种情况下,您保存的所有内容都是外键的开销,因此所需的存储量为800字节.

这当然是基于许多假设,例如字符编码总是每个字符1个字节,构成样本的字符串永远不会超过8个字符等.

但是,当然还有用于序列化数据的任何机制的开销.绝对最简单的方法CSV表示在每个样本之间添加逗号.这会为存储的字符串添加n-1个字节.所以上面的例子现在是899字节,这是最简单的编码方案. JSON,XML,甚至PHP序列化都会增加比这更多的开销字符,并且很快就会有超过1600字节的字符串.所有这些都是假设1字节字符编码.

如果需要索引样本,数据需求将对字符串的增长更加不成比例,因为字符串索引在存储方面比浮点列索引要贵得多.

当然,如果您的样本开始添加更多数字,则数据存储会进一步增加.即使在最好的情况下,39281.3392810也不能作为字符串存储在8个字节中.

如果数据被序列化,则数据库无法操作.你无法对样本进行排序,对它们进行任何类型的数学运算,数据库甚至不知道它们是数字!

说实话,如今存储空间非常便宜,你可以购买多个TB驱动器以获得微小的数量.存储真的那么重要吗?除非你有数亿条记录,否则我对此表示怀疑.

您可能想查看一本名为SQL Antipatterns的书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值