sql - 存储 JSON 字符串的最佳 SQL 数据类型是什么?

存储 JSON 字符串的最佳 SQL 数据类型是什么?

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 数据类型来存储这样一个包含 JSON 的字符串?

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

最佳答案

当然不是:

  • TEXT、NTEXT:这些类型自 SQL Server 2005 起已弃用,不应用于新的开发。请改用 VARCHAR(MAX)NVARCHAR(MAX)

  • IMAGE, VARBINARY(MAX) : IMAGETEXT/NTEXT 一样已弃用,而且将文本字符串存储到二进制列中确实没有意义....

所以基本上剩下 VARCHAR(x)NVARCHAR(x):VARCHAR 存储非 Unicode 字符串(每个字符 1 个字节) NVARCHAR 以每字符 2 字节的 Unicode 模式存储所有内容。那么你需要Unicode吗?您的字符串中是否可能包含阿拉伯语、希伯来语、中文或其他非西欧字符?然后使用 NVARCHAR

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

更新: SQL Server 2016 将支持原生 JSON - 新的 JSON 数据类型(基于 nvarchar) 以及 FOR JSON 命令将查询的输出转换为 JSON 格式

更新 #2: 在最终产品中,Microsoft 没有包含单独的 JSON 数据类型 - 相反,有许多 JSON 函数(用于打包数据库行转换为 JSON,或将 JSON 解析为关系数据)对 NVARCHAR(n)

类型的列进行操作

https://stackoverflow.com/questions/9207404/

相关文章:

android - 如何使用 Android 通过 Request 发送 JSON 对象?

json - 在 Scala 中使用什么 JSON 库?

android - google-services.json 的真正作用是什么?

json - 在 Swift 3 中正确解析 JSON

ios - 如何在 Swift 中解析来自 Alamofire API 的 JSON 响应?

Python - 没有空格的 json

c# - 使用 JSON.NET 的序列化字段的顺序

javascript - 从浏览器下载 JSON 对象作为文件

jquery - 通过 POST (ajax) 发送 JSON 数据并从 Controller (M

c# - 如何在 C# 中将字典转换为 JSON 字符串?