Qual é o melhor tipo de dados SQL para armazenar a string JSON?
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;
}
Que tipo de dados SQL devemos usar para armazenar uma string contendo JSON?
NVARCHAR(255)
?TEXT
?VARBINARY(MAX)
?
sql
sql-server
json
DatPT
fonte
fonte
Respostas:
Certamente NÃO :
TEXT, NTEXT
: esses tipos estão obsoletos no SQL Server 2005 e não devem ser usados para novos desenvolvimentos. UsarVARCHAR(MAX)
ou emNVARCHAR(MAX)
vez dissoIMAGE
,VARBINARY(MAX)
:IMAGE
é preterido da mesma formaTEXT/NTEXT
e não há realmente nenhum sentido em armazenar uma sequência de texto em uma coluna binária ....De modo que basicamente deixa
VARCHAR(x)
ouNVARCHAR(x)
:VARCHAR
armazena cadeias não Unicode (1 byte por caractere) eNVARCHAR
armazena tudo no modo Unicode de 2 bytes por caractere. Então você precisa de Unicode? Você tem caracteres árabes, hebraicos, chineses ou outros caracteres que não sejam da Europa Ocidental em suas cordas, potencialmente? Então vá comNVARCHAR
As
(N)VARCHAR
colunas têm dois tipos: você define um comprimento máximo que resulta em 8000 bytes ou menos (VARCHAR
até 8000 caracteres,NVARCHAR
até 4000) ou, se isso não for suficiente, use as(N)VARCHAR(MAX)
versões que armazenam até 2 GByte de dados.Atualização: o SQL Server 2016 terá suporte JSON nativo - um novo
JSON
tipo de dados (baseado emnvarchar
) será introduzido, bem como umFOR JSON
comando para converter a saída de uma consulta no formato JSONAtualização # 2: no produto final, a Microsoft não incluiu um
JSON
tipo de dados separado . Em vez disso, existem várias funções JSON (para empacotar linhas do banco de dados em JSON ou para analisar JSON em dados relacionais) que operam em colunas do tipoNVARCHAR(n)
fonte
NVARCHAR(n)
tipos de dadosEu irei
nvarchar(max)
. Isso deve atender ao requisito.Atualização: com o SQL Server 2016 e o SQL do Azure, há muitos recursos JSON nativos adicionais. Isso pode impactar positivamente seu design ou abordagem. Você pode ler isso para obter mais informações: https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server
fonte
nvarchar
evita os problemas de agrupamento que você eventualmente terá ao usarvarchar
, mas será mais lento no desempenho da consulta do quevarchar
. Ótima pergunta sobre DBA com mais informações.Eu recomendaria usar
nvarchar(max)
se você planeja usar os recursos JSON no SQL 2016 ou SQL do Azure.Se você não planeja usar esses recursos, poderá usar
varbinary(max)
combinado com as funçõesCOMPRESS
(eDECOMPRESS
). Mais informações: https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/23/storing-json-in-sql-server/fonte
O tipo de dados recomendado é NVARCHAR .
Consulte https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server?view=sql-server-ver15#store-and-index-json-data- in-sql-server] [1]
fonte
nvarchar (max) é melhor para isso, também mais uma coisa que você pode fazer assim.
fonte