Mysql 在表中存储/检索数组的最佳方法

Mysql 在表中存储/检索数组的最佳方法,mysql,Mysql,我目前在MySQL中有一个正常存储值的表,但我想在该表中添加一个存储值数组的字段,例如cities。我是否应该简单地将该数组存储为CSV?每一行都需要它自己的数组,所以我对创建一个新表并为前一个表中插入的每一行插入2-5行感到不安 我觉得这种情况应该有个名字,我就是想不起来:) 编辑 元素数-2-5(从动态城市列表中选择,数组引用列表,列表是一个表) 此字段不需要可搜索,只需与其他数据一起检索。正确的方法是使用另一个表来保存每个值,但由于您不想使用该方法,因此分隔列表应该可以工作。只需确保选择的

我目前在MySQL中有一个正常存储值的表,但我想在该表中添加一个存储值数组的字段,例如cities。我是否应该简单地将该数组存储为CSV?每一行都需要它自己的数组,所以我对创建一个新表并为前一个表中插入的每一行插入2-5行感到不安

我觉得这种情况应该有个名字,我就是想不起来:)

编辑

元素数-2-5(从动态城市列表中选择,数组引用列表,列表是一个表)


此字段不需要可搜索,只需与其他数据一起检索。

正确的方法是使用另一个表来保存每个值,但由于您不想使用该方法,因此分隔列表应该可以工作。只需确保选择的分隔符不会显示在数据中。您还可以将数据存储为XML,具体取决于您计划如何与数据交互,这可能是一种更好的方法

也许你要找的词是“正常化”。如中所示,将数组移动到单独的表中,通过键链接到第一个表。这有几个优点:

  • 阵列大小几乎可以无限增长

  • 高效存储

  • 无需使用“like”即可搜索数组中的值


当然,是否规范化此数据取决于您没有提到的许多因素,如元素的数量、数量是否固定、元素是否需要可搜索等等。

我赞成使用包含逗号(或其他逻辑分隔符)分隔值的字段。只要确保您的字段足够大,可以容纳最大的数组大小。然后,当您拉出字段时,应该很容易使用分隔符对长字符串执行explode(),这将立即在代码中填充数组。

您的应用程序是PHP吗?可能值得研究函数


这两个函数允许您轻松地在数据库中存储数组,然后在以后重新创建该数组。

正如其他人所提到的,另一个表是正确的方法


但是如果您真的不想这样做(?),假设您使用的是PHP和MySQL,为什么不使用并存储一个序列化的值呢?

如果您致力于将数据存储在文本字段中,并且正在考虑XML,那么您可以通过给YAML至少一个短暂的一瞥来为自己提供服务。我很快就成为了一名皈依者。这不一定是对的/错的,我正在努力找出存储/检索这些信息的最佳方式。