145 votes

Quel est le meilleur type de données SQL pour stocker json string?

Quel est le meilleur type de données SQL pour stocker json string?

 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 devrions-nous utiliser pour stocker une telle chaîne contenant json?

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

214voto

marc_s Points 321990

Certainement PAS:

  • TEXT, NTEXT: ces types sont obsolètes comme de SQL Server 2005 et ne doit pas être utilisé pour un nouveau développement. Utiliser VARCHAR(MAX) ou NVARCHAR(MAX) au lieu

  • IMAGE, VARBINARY(MAX) : IMAGE est obsolète, tout comme TEXT/NTEXT, et il n'y a pas vraiment d'intérêt à stocker une chaîne de texte dans une colonne binaire....

De sorte que, fondamentalement, les feuilles VARCHAR(x) ou NVARCHAR(x): VARCHAR magasins non-Unicode (1 octet par caractère) et NVARCHAR stocke tout dans un 2-octet par caractère Unicode mode. Si vous avez besoin d'Unicode? Avez-vous l'arabe, l'hébreu, le Chinois ou d'autres non-Ouest-Européen de caractères dans vos cordes, potentiellement? Puis aller avec NVARCHAR

L' (N)VARCHAR colonnes sont de deux types: soit vous définissez une longueur maximale que les résultats de 8000 octets ou moins (VARCHAR jusqu'à 8000 caractères, NVARCHAR jusqu'à 4000), ou si cela ne suffit pas, utilisez l' (N)VARCHAR(MAX) versions, qui stocker jusqu'à 2 Go de données.

34voto

Kangkan Points 7119

Je vais aller pour nvarchar (max). Cela devrait correspondre à l'exigence.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X