JSON和JSONB数据类型在PosgresSQL中有什么区别?
- 应该在什么情况下使用特定的类型?
- 相对于其他类型,有什么好处或缺点?
JSON和JSONB数据类型在PosgresSQL中有什么区别?
JSON
基本上是一个存储JSON数据的二进制大对象,以原始格式保存甚至不重要的东西,如空格、对象中键的顺序或者对象中重复的键。它提供了一些基本的JSON操作,例如提取与对象中某个键关联的值,尽管由于每次都需要解析JSON大对象,因此它在这方面的速度较慢。它还会验证每个值以检查其是否为有效的JSON格式。JSONB
则使用自定义格式存储JSON数据,该格式针对某些操作进行了优化,例如提取与对象中某个键关联的值(即不会重新解析JSON,也不会线性搜索)。此外,JSONB
支持更多操作,例如对象的连接或在对象中设置深层次的值。
通常情况下,我只有在知道自己不会进行任何JSON操作或仅偶尔进行操作时才会使用JSON
。对于所有其他情况,我都会使用JSONB
。请注意,在前一种情况下,text
也是一个完全有效的选项,特别是如果您对数据源的信任不需要JSON
所提供的验证功能。