存储 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)
: IMAGE
与 TEXT/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/