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

jogvjijk  于 2023-03-09  发布在  其他
关注(0)|答案(2)|浏览(185)

我试图创建一个网站使用asp.net核心,实体框架和MySQL。但我被困在一个点。**存储列表变量在SQL列。**我有一个数据库模型,必须存储列表在它。我读过关于存储列表在SQL中的问题,但大多数回答是说不要这样做。我很好奇我可以序列化我的列表到JSON和存储在一列?
喜欢;

new List<string>(){"data1", "data2"}

"["data1", "data2"]"

这样做有缺点吗?或者有其他的解决办法吗?我愿意接受所有的建议。

brccelvz

brccelvz1#

是的,你可以在MySQL中存储JSON。MySQL从5.7版本开始就有一个JSON type,但是他们至少在8.0.17版本之前有很多功能,而且JSON的新修复程序仍在引入中。
你问了缺点。是的,有很多缺点。

  • JSON格式的数据通常使用的空间是以普通行和列存储相同数据的2-3倍,因此您将在存储上花费更多,并且它将更快地填满。
  • 如果只存储一个数组,然后再获取整个数组,这很容易,但很多人倾向于在SQL表达式中使用JSON数组或对象的元素,这使得查询更加复杂,难以编码,也难以优化。

您应该阅读一些过去的questions I've answered about MySQL in JSON,了解一些人在尝试使用JSON时所引起的麻烦类型-如果他们使用普通的行和列,它会是如此简单。从我所看到的人们滥用JSON的方式来看,我倾向于说,这是添加到任何关系数据库中的最不明智的特性。

  • 如果你想把JSON数组看作离散元素的集合,那么你需要学习JSON functions provided by MySQL的集合,学习如何使用这些函数构建数组、搜索数组以及获取数组切片。
  • 在JSON数组中搜索特定元素不能使用传统索引进行优化。必须使用多值索引。

你可能也喜欢我的演示文稿How to Use JSON in MySQL Wrong
在存储简单数组的示例中,如果在相关表中每行存储一个值,则对于存储效率、查询复杂性和优化而言会更好。这是在关系数据库中存储多值属性的正确方法。
使用JSON就像任何其他形式的反规范化一样。它 * 可能 * 是一个优点,但仅限于特定的查询。它对所有其他查询都是不利的。

pxq42qpu

pxq42qpu2#

是,您可以序列化为JSON字符串

Newtonsoft.Json.JsonConvert.SerializeObject(list);

并反串行化

list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(jsonArray);

相关问题