我应该如何在 MySQL 数据库中存储数组值?
Posted
技术标签:
【中文标题】我应该如何在 MySQL 数据库中存储数组值?【英文标题】:How should I store array values in a MySQL database? 【发布时间】:2012-11-12 12:08:36 【问题描述】:为了提供一些背景知识,我正在创建一个主要使用 jQuery 的 Web 应用程序。我从另一个域的页面中抓取了一些值; 3 个整数数组和一个字符串格式的日期。然后这些值会显示在我的页面上。这些数组中的每一个都有 7 个数字。
将每个数组作为一个条目存储在我的 mysql 数据库中对我来说是有意义的。我最初的想法是将每个数组的值存储为 JSON 对象,然后通过阅读将其插入到我在数据库中的条目中,所以这似乎不是采用的方法。我不认为在未来的任何阶段都需要对值进行排序。我只需要每个整数的值,不需要知道每个数组中的每个整数是如何相互关联的。
有人可以为我指出有关这些值的存储和检索的正确方向吗?
【问题讨论】:
正好相反,在关系数据库的列中存储像数组这样的复杂值没有任何意义 【参考方案1】:也许serialize() 和unserialize() 会帮助你。但我不会建议这是最好的方法。
【讨论】:
【参考方案2】:通常数组有点难以处理。在大多数情况下,数组是我需要稍后在前端使用 javascript 为用户处理的值(无论如何也想不出其他用途)。因此,我通常做的是通过使用将它们存储为文本
$array = array('one', 'two', 'three');
$textToSaveinDB = implode(',', $array);
当我检索到这个时,你会使用相反的方式
$textFromDB = "one,two,three";
$array = explode(textFromDB, ',')
之后你可以对数组做任何你需要做的事情。例如使用 JSON_encode() 并通过 ajax 发送给用户。
【讨论】:
您建议将数组存储为哪种类型?如果每个数组包含 7 个数字,并且每个数字只能介于 1 和 100 之间,那么使用 CHAR(30) 是否有意义?我对数据类型不太熟悉。 从技术上讲,您只需要 7*3 + 6 = 27 个字符,因此 CHAR(27) 就足够了。如果这不是用户输入,那么没有问题。在写入数组之前,您必须检查输入是否正确。 目前我将值存储在 JavaScript 数组中。将这些分配给 php 变量以便将它们存储在 MySQL 数据库中的最佳方法是什么?还是有另一种更好的方法将我的 JS 数组直接插入数据库? 通常你会通过 jquery 的 ajax 调用来做到这一点。 当您的数组值包含逗号时,这将不起作用。最好使用 CSV 或 JSON 之类的东西将序列化的数组存储在您的数据库中。以上是关于我应该如何在 MySQL 数据库中存储数组值?的主要内容,如果未能解决你的问题,请参考以下文章