Dat*_*tPT 120 sql sql-server json
存储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;
}
Run Code Online (Sandbox Code Playgroud)
我们应该使用哪种SQL数据类型来存储包含JSON的字符串?
NVARCHAR(255)
?TEXT
?VARBINARY(MAX)
?mar*_*c_s 184
当然不是:
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)
Kan*_*kan 29
我会去的nvarchar(max)
.这应符合要求.
更新: 使用SQL Server 2016和Azure SQL,还有许多其他本机JSON功能.这可能对您的设计或方法产生积极影响.您可以阅读以下内容:https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server
归档时间: |
|
查看次数: |
71644 次 |
最近记录: |