62

我打算json_encoded在我的数据库中存储一个字符串。我不能准确地说出它的长度,但我很确定它会很长。我关心的是我将为此使用哪种字段类型,是它blob还是text

我更喜欢可以通过快速搜索尽可能节省空间的那个,无论如何我还有其他列我应该只索引。

4

2 回答 2

56

如MySQL文档中所述,从 5.7.8 开始支持原生 JSON 数据类型。

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

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

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

于 2015-12-28T10:59:27.907 回答
42

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

搜索方面,由于您正在存储json_encode'd 的东西,您仍然需要调用json_decode它才能在您的应用程序中使用它,我认为在这种情况下选择数据类型并不重要。

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

于 2012-04-18T03:11:37.203 回答