2012-04-18 204 views
28

我打算在我的数据库中存储一个json_encoded字符串。我不能准确地说出它的长度,但我很肯定它会很长。我担心的是我将使用哪种字段类型,是blob还是text我应该在MySQL中使用blob还是文本JSON?

我更喜欢能够通过快速搜索尽可能节省空间的任何情况,无论如何,我还有其他专栏,我只需索引。

回答

24

blob通常是类似图像等内容,双星等text应该是你的情况不够好,或者你可以使用longtext它有更大的空间容量,如果这是一个真正的问题。

由于您正在存储json_encode的东西,因此无论如何仍然需要调用json_decode,因为它在您的应用程序中很有用,我不认为在这种情况下选择数据类型很重要。

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

+2

感谢您的真知灼见。 – 2012-04-18 03:22:18

+1

我大约2年11个月后,但对于webhooks的有效载荷,在等待它发送的同时存储序列化的JSON似乎是一个很好的用例。如果有人有不同的看法,我喜欢反馈。 – Mave 2015-03-12 11:54:48

+2

Pinterest在'text'中也存储了JSON,他们[最近在本文中发布了它(向下滚动一半)](https://engineering.pinterest.com/blog/sharding-pinterest-how-we-scaled-我们的MySQL的舰队)。 – DanFromGermany 2015-09-15 13:23:26

21

如文档MySQL所述,由于5.7.8支持本机JSON数据类型。

  • 存储在JSON列JSON文档自动验证:

    JSON数据类型在存储JSON格式字符串字符串中的列提供这些优点。无效的文档会产生错误。

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

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