首先,您真的不想这样做。RDBMS中的一列是原子的,因为它只包含一个信息。试图在一个列中存储多个数据违反了第一标准格式。
如果绝对必须这样做,则需要将数据转换为可以存储为单个数据项(通常是字符串)的形式。您可以使用PHP的serialize()机制,XML解析(如果数据恰好是文档树),json_enpre()等。
但是,您如何有效地查询此类数据?答案是你做不到。
另外,如果以后有人接管您的项目,您真的会惹恼他们,因为数据库中的序列化数据非常难以使用。我知道,因为我继承了此类项目。
我是否提到过您真的不想这样做?您需要重新考虑您的设计,以便可以根据原子行更轻松地存储它。例如,将另一个表用于此数据,并使用外键将其与主记录相关联。由于某种原因,它们被称为关系数据库。
更新 :有人问我有关数据存储的要求,例如单行存储是否便宜。答案是,在典型情况下,不是,在答案是肯定的情况下,您所付出的代价是不值得的。
如果使用2列相关表(该样本所属记录的外键使用1列,单个样本使用1列),则每列在最坏情况下将需要16个字节(longint键列为8个字节,而8个字节为8个字节)用于双精度浮点数)。对于100条记录,即1600字节(忽略db开销)。
对于序列化的字符串,最好在字符串中每个字符存储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》的书



