我应该在MySQL中使用blob或文本作为JSON吗?

Lea*_*cia 46 mysql text blob mysql-json

我打算json_encoded在我的数据库上存储一个字符串.我不能准确地说出它的长度,但我很确定它会很长.我担心的是哪种场类型,我要使用这个,是不是blob还是text

我更喜欢能够在快速搜索中尽可能节省空间的那个,在任何情况下我都有其他列我应该索引.

cs0*_*iz1 36

正如MySQL的文档中所述,自5.7.8以来,支持本机JSON数据类型.

与在字符串列中存储JSON格式字符串相比,JSON数据类型具有以下优势:

  • 自动验证存储在JSON列中的JSON文档.无效的文档会产生错误.
  • 优化的存储格式.存储在JSON列中的JSON文档将转换为内部格式,以允许对文档元素进行快速读取访问.当服务器稍后必须读取以该二进制格式存储的JSON值时,不需要从文本表示中解析该值.二进制格式的结构使服务器能够直接通过键或数组索引查找子对象或嵌套值,而无需在文档之前或之后读取所有值.

因此,正如MySQL文档所述,应该使用JSON数据类型而不是文本.

  • _Optimized存储格式.这是否意味着需要更小的空间? (6认同)
  • 从以下链接获取:https://dev.mysql.com/doc/refman/5.7/en/json.html`存储JSON文档所需的空间与LONGBLOB或LONGTEXT大致相同;` (4认同)
  • @Devner 向您的对象添加一个有序数组,我们称之为“keysOrder”。它将按照您想要的顺序包含您的密钥。当您解析/解码 json 时,您将需要根据 `keysOrder` 数组对键重新排序。例如:`{“c”:“3”,“a”:“1”,“b”:“2”,“d”:“4”,“keysOrder”:['a','b',' c', 'd']}` (3认同)
  • @Devner您所描述的内容(字典、关联数组或哈希图)本质上是无序的。您需要存储一个映射来保持其中之一的有序。 (2认同)

And*_*ong 30

blob通常用于像图像,二进制文件等等text,对于你的情况应该足够好,或者你可以使用longtext哪个具有更大的空间容量,如果这真的是一个问题.

搜索方式,因为你正在存储json_encode'd stuff,你仍然需要调用json_decode它,因为它在你的应用程序中很有用,我不认为在这种情况下数据类型的选择很重要.

更好的方法是规范化您的数据库设计,而不是将相关的东西存储在一个大的json字符串中.

  • 感谢您的亲切见解. (2认同)
  • 我大约 2 年零 11 个月后,但至于 webhooks 的有效负载,在等待发送的同时存储序列化的 JSON 似乎是一个很好的用例。如果有人有不同的想法,我喜欢反馈。 (2认同)
  • Pinterest也将JSON存储在`text`中,它们[最近在本文中发布(向下滚动)](https://engineering.pinterest.com/blog/sharding-pinterest-how-we-scaled-our -mysql舰队). (2认同)