我可以在 SQL 列中存储 JSON 列表吗

Ert*_*rul 0 mysql sql json entity-framework asp.net-core

我正在尝试使用 asp.net core、实体框架和 MySQL 创建一个网站。但我被困在一点上。 在 SQL 列中存储列表变量。我有一个必须在其中存储列表的数据库模型。我读过有关在 SQL 中存储列表的问题,但大多数答案都是说不要这样做。我很好奇我可以将列表序列化为 JSON 并将其存储在一列中吗?

喜欢;

new List<string>(){"data1", "data2"}
Run Code Online (Sandbox Code Playgroud)

到

"["data1", "data2"]"
Run Code Online (Sandbox Code Playgroud)

这样做有什么缺点吗?或者还有其他解决方案吗?我愿意接受所有建议。

Bil*_*win 5

是的,您可以将 JSON 存储在 MySQL 中。MySQL 从 5.7 版开始就有JSON 类型,但至少在 8.0.17 版之前它们有很多缺失的功能,并且仍在引入对 JSON 的新修复。

\n

你问的是缺点。是的,有很多。

\n
    \n
  • JSON 格式的数据通常使用的空间是在普通行和列中存储相同数据的 2-3 倍,因此您将在存储上花费更多,并且它会更快填满。

    \n
  • \n
  • 如果您只存储一个数组并稍后获取整个数组,那就很简单。但很多人都想在 SQL 表达式中使用 JSON 数组的元素或对象。这使得查询变得更加复杂,难以编码,也难以优化。

    \n

    您应该阅读我过去回答过的一些有关 JSON 中 MySQL 的问题,并了解一些人在尝试使用 JSON \xe2\x80\x94 时造成的麻烦类型,而如果他们使用普通的行和列,情况会很简单。从我所看到的人们滥用 JSON 的方式来看,我倾向于说这是添加到任何关系数据库中最不明智的功能。

    \n
  • \n
  • 您需要研究MySQL 提供的 JSON 函数集如果您尝试将 JSON 数组视为离散元素的集合,则您将必须学习如何构建数组、搜索数组以及使用这些函数获取数组切片。

    \n
  • \n
  • 在 JSON 数组中搜索特定元素无法使用传统索引进行优化。您必须使用多值索引。

    \n
  • \n
\n

您可能还喜欢我的演示如何在 MySQL 中错误地使用 JSON。

\n

在存储简单数组的示例中,如果将每行一个值存储在从属表中,则存储效率、查询复杂性和优化会更好。这是在关系数据库中存储多值属性的正确方法。

\n

使用 JSON 就像任何其他形式的非规范化一样。这可能是一个优势,但仅限于特定查询。对于所有其他查询来说,它都处于不利地位。

\n