Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL数据库中存储数组的最佳方法?_Mysql_Arrays - Fatal编程技术网

在MySQL数据库中存储数组的最佳方法?

在MySQL数据库中存储数组的最佳方法?,mysql,arrays,Mysql,Arrays,我的应用程序的一部分包括歌曲的音量自动控制 卷自动化以以下格式描述: [[0,50],[20,62],[48,92]] 我认为这个数组中的每个项目都是一个“数据点”,第一个值包含歌曲中的位置,第二个值包含0~100的音量。 然后,我获取这些值并在客户端执行一个函数,用“虚拟”数据点插值这些数据,以便创建贝塞尔曲线,从而在播放音频文件时实现平滑的音量过渡 然而,需要允许用户将此自动化保存到数据库中,以便在以后调用 数据点可以是无限的(尽管实际上永远不应该超过40-50左右,大多数数据点小于10

我的应用程序的一部分包括歌曲的音量自动控制

卷自动化以以下格式描述:

[[0,50],[20,62],[48,92]] 

我认为这个数组中的每个项目都是一个“数据点”,第一个值包含歌曲中的位置,第二个值包含0~100的音量。

然后,我获取这些值并在客户端执行一个函数,用“虚拟”数据点插值这些数据,以便创建贝塞尔曲线,从而在播放音频文件时实现平滑的音量过渡

然而,需要允许用户将此自动化保存到数据库中,以便在以后调用

数据点可以是无限的(尽管实际上永远不应该超过40-50左右,大多数数据点小于10)

我应该如何处理数据?是否应按原样存储在文本字段中?或者我应该事先以某种方式处理它以获得最佳结果


在MySQL中最好使用哪种数据类型来存储数组?

肯定不是
text
字段,而是
varchar
——也许吧。我不建议解析结果并将其存储在单独的列中,除非您想利用数据库意义上的数据——统计数据等

如果您从未看到自己问过“用户使用的平均卷是多少?”那么就不要费心解析它

要了解如何存储这些数据,请自问“以后我将如何使用它?”如果您将获得数组并需要将其与PHP一起使用,则可以使用函数。如果您将使用JavaScript中的值,那么JSON编码可能最适合您(加上许多语言知道如何解码)


祝你好运

如果在检索行时速度是最重要的,那么创建一个新表并将其专用于保存数组的索引。使用integer的数据类型,并使每一行表示数组的索引。您必须创建另一个数字列,将它们绑定在一起,以便可以使用SQL查询重新组装数组


通过这种方式,您可以帮助MySQL加快访问速度。如果您只需要数组的某些部分,只需更改SQL查询中的范围,就可以根据需要重新组装数组。

我建议您查看JSON数据类型。通过这种方式,您可以以比text或varchar更高效的方式存储数组,并且您可以直接从MySQL访问数据,而无需解析整个内容


查看此链接:

您在应用程序中使用的数据类型是什么?它是字符串、数组还是对象?我从“按原样,在一个文本字段中”中收集信息,意思是您在内部将点表示为一个字符串,但我可能读错了。为什么不创建多个INT类型的字段呢?例如volume\u min、volume\u max、song\u position如果您不需要执行形式查询来搜索该数组中的值,您只需使用
文本
字段并存储该数组的序列化版本(您在此处发布的方式是ok的,
[[0,50],[20,62],[48,92]
),它是一个数组@洛伦佐-你是对的,我不需要对这些数据执行查询。每个volume automation阵列在表中都有一个与之关联的用户ID、songid和名称。您是否计划在数据库中对数据执行任何计算?如果没有,那么将其存储为文本(或者按照您的格式存储为JSON),然后将其读回内存中相应的对象也没有什么害处。完美答案米哈伊尔谢谢。它涵盖了所有有疑问的要点。@Mikhail+1好吧,但为什么不使用
文本
字段?
文本
用于存储实际文本,比如故事或诗歌。它不是用来存储字符串的。在MySQL中,文本存储在一个文件中,而不是“树的叶子”。有关它的一切都比较慢,搜索、索引、缓存。@Kaan,我不知道MySQL会根据同一列的内容以不同的方法存储同一列。@Mikhail我的意思是MySQL最终会将所有内容保存到一个文件中(保存某些存储引擎)。但是文本列只存储在不同的页面上(根据配置和大小),而不是单独的文件(谈论InnoDB存储引擎,但我想其他人也会这么做)。无论如何,如果您的数据适合内存,那么无论如何都将从内存访问它。因此,是的,访问它们可能会有开销(如果它们在外部页面而不是行页面中),但我认为这还不够明显,尤其是当数据不像这个问题中那样大时