Quel est le meilleur type de données SQL pour stocker une chaîne 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;
}
Quel type de données SQL devons-nous utiliser pour stocker une telle chaîne contenant JSON?
NVARCHAR(255)
?TEXT
?VARBINARY(MAX)
?
sql
sql-server
json
DatPT
la source
la source
Réponses:
Certainement PAS :
TEXT, NTEXT
: ces types sont obsolètes à partir de SQL Server 2005 et ne doivent pas être utilisés pour un nouveau développement. UtilisezVARCHAR(MAX)
ou à laNVARCHAR(MAX)
placeIMAGE
,VARBINARY(MAX)
:IMAGE
est obsolète commeTEXT/NTEXT
, et il n'y a vraiment aucun intérêt à stocker une chaîne de texte dans une colonne binaire ....Donc, en gros,
VARCHAR(x)
ouNVARCHAR(x)
:VARCHAR
stocke les chaînes non Unicode (1 octet par caractère) etNVARCHAR
stocke tout dans un mode Unicode de 2 octets par caractère. Alors, avez-vous besoin d'Unicode? Avez-vous des caractères arabes, hébreux, chinois ou autres caractères non occidentaux dans vos chaînes, potentiellement? Alors allez avecNVARCHAR
Les
(N)VARCHAR
colonnes sont disponibles en deux versions: soit vous définissez une longueur maximale qui donne 8000 octets ou moins (VARCHAR
jusqu'à 8000 caractères,NVARCHAR
jusqu'à 4000), ou si cela ne suffit pas, utilisez les(N)VARCHAR(MAX)
versions, qui stockent jusqu'à 2 Go de données.Mise à jour: SQL Server 2016 aura un support JSON natif - un nouveau
JSON
type de données (basé surnvarchar
) sera introduit, ainsi qu'uneFOR JSON
commande pour convertir la sortie d'une requête au format JSONMise à jour n ° 2: dans le produit final, Microsoft n'a pas inclus de
JSON
type de données séparé - à la place, il existe un certain nombre de fonctions JSON (pour regrouper les lignes de base de données en JSON, ou pour analyser JSON en données relationnelles) qui fonctionnent sur des colonnes de typeNVARCHAR(n)
la source
NVARCHAR(n)
des types de donnéesJe vais y aller
nvarchar(max)
. Cela devrait correspondre à l'exigence.Mise à jour: avec SQL Server 2016 et Azure SQL, il existe de nombreuses fonctionnalités JSON natives supplémentaires. Cela pourrait avoir un impact positif sur votre conception ou votre approche. Vous pouvez lire ceci pour en savoir plus: https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server
la source
nvarchar
évite les problèmes de classement que vous rencontrerez éventuellement lors de l'utilisationvarchar
, mais les performances des requêtes seront plus lentes quevarchar
. Grande question DBA avec plus d'informations.Je recommanderais d'utiliser
nvarchar(max)
si vous prévoyez d'utiliser les fonctionnalités JSON sur SQL 2016 ou Azure SQL.Si vous ne prévoyez pas d'utiliser ces fonctionnalités, vous pouvez utiliser
varbinary(max)
des fonctions combinées avecCOMPRESS
(etDECOMPRESS
). Plus d'informations: https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/23/storing-json-in-sql-server/la source
Le type de données recommandé est NVARCHAR .
Veuillez vous référer à 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]
la source
nvarchar (max) est meilleur pour cela, vous pouvez également faire une chose de plus comme ça.
la source