什么是最好的SQL数据types来存储JSONstring?

什么是用于存储JSONstring的最佳SQL数据types?

static List<ProductModel> CreateProductList() { string json = @"[ { ProductId: 1, ProductCode: 'A', Product: 'A' }, { ProductId: 2, ProductCode: 'B', Product: 'B' } ]"; IList<JToken> tokenList = JToken.Parse(json).ToList(); List<ProductModel> productList = new List<ProductModel>(); foreach (JToken token in tokenList) { productList.Add(JsonConvert.DeserializeObject<ProductModel>(token.ToString())); } return productList; } 

我们应该使用哪种SQL数据types来存储包含JSON的string?

  • NVARCHAR(255)
  • TEXT
  • VARBINARY(MAX)

当然不是

  • TEXT, NTEXT :这些types在SQL Server 2005中不推荐使用 ,不应该用于新的开发。 改用VARCHAR(MAX)NVARCHAR(MAX)

  • IMAGEVARBINARY(MAX)IMAGETEXT/NTEXT一样被弃用,将文本string存储到二进制列中真的没有意义。

因此,基本上保留了VARCHAR(x)NVARCHAR(x)VARCHAR存储非Unicodestring(每个字符1个字节), NVARCHAR每字符2个字节的Unicode模式存储所有内容。 那么你需要Unicode吗? 你的string中是否有阿拉伯文,希伯来文,中文或其他非西欧文字? 然后去与NVARCHAR

(N)VARCHAR列有两种types:要么定义最大长度为8000个字节或更less( VARCHAR最多8000个字符, NVARCHAR最多4000个),或者如果这还不够,请使用(N)VARCHAR(MAX)版本,可存储高达2 GB的数据。

更新: SQL Server 2016将具有本机JSON支持 – 将引入新的JSON数据types(基于nvarchar ),以及FOR JSON命令将查询的输出转换为JSON格式

更新#2:在最终产品中,Microsoft没有包含单独的JSON数据types – 相反,有许多JSON函数(将数据库行打包成JSON,或将JSONparsing为关系数据)typesNVARCHAR(n)

我会去nvarchar(max) 。 这应该符合要求。

更新:有了SQL Server 2016和Azure SQL,还有很多额外的本地JSONfunction。 这可能对您的devise或方法产生积极影响。 您可以阅读更多: https : //docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server

如果您计划在SQL 2016或Azure SQL上使用JSONfunction,我build议使用nvarchar(max)

如果您不打算使用这些function,则可以将varbinary(max)COMPRESS (和DECOMPRESS )函数结合使用。 更多信息: https : //blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/23/storing-json-in-sql-server/

COMPRESS和DECOMPRESSfunction使用标准的GZip压缩。 如果您的客户端可以处理GZip压缩(例如,了解gzip内容的浏览器),则可以直接返回压缩的内容。 请注意,这是性能/存储的权衡。 如果您经常查询您mig的压缩数据,性能会降低,因为每次都必须对文本进行解压缩。