Подтвердить что ты не робот

Какой лучший тип данных SQL для хранения строки JSON?

Какой лучший тип данных SQL для хранения строки 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;
}

Какой тип данных SQL следует использовать для хранения такой строки, содержащей JSON?

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

Ответ 1

Конечно НЕ:

  • TEXT, NTEXT: эти типы устарели с SQL Server 2005 и не должны использоваться для новой разработки. Вместо этого используйте VARCHAR(MAX) или NVARCHAR(MAX)

  • IMAGE, VARBINARY(MAX): IMAGE устарел так же, как TEXT/NTEXT, и нет смысла хранить текстовую строку в двоичном столбце....

Таким образом, в основном уходит VARCHAR(x) или NVARCHAR(x): VARCHAR хранит строки не Unicode (1 байт на символ), а NVARCHAR хранит все в режиме Unicode в 2 байта за символ. Вам нужен Юникод? У вас есть арабский, иврит, китайский или другие незападные европейские персонажи в ваших строках? Затем перейдите к NVARCHAR

Столбцы (N)VARCHAR представлены в двух вариантах: либо вы определяете максимальную длину, которая составляет 8000 байт, либо меньше (VARCHAR до 8000 символов, NVARCHAR до 4000), или если этого недостаточно, используйте версии (N)VARCHAR(MAX), в которых хранится до 2 ГБ данных.

Обновление: SQL Server 2016 будет иметь встроенную поддержку JSON - будет введен новый тип данных JSON (который основан на NVARCHAR), а также a FOR JSON для преобразования вывода из запроса в формат JSON

Обновление # 2: в конечном продукте, Microsoft не включила отдельный тип данных JSON - вместо этого существует ряд JSON-функций (для упаковки строк базы данных в JSON или для разбора JSON в реляционных данных), которые работают с столбцами типа NVARCHAR(n)

Ответ 2

Я пойду за nvarchar(max). Это должно соответствовать требованиям.

Update: С SQL Server 2016 и Azure SQL существует множество дополнительных возможностей JSON. Это может положительно повлиять на ваш дизайн или подход. Вы можете прочитать это для более: https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server

Ответ 3

Я бы рекомендовал использовать nvarchar(max), если вы планируете использовать функции JSON на SQL 2016 или Azure SQL.

Если вы не планируете использовать эти функции, вы можете использовать varbinary(max) в сочетании с функциями COMPRESSDECOMPRESS). Дополнительная информация: https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/23/storing-json-in-sql-server/

Функции COMPRESS и DECOMPRESS используют стандартное сжатие GZip. Если ваш клиент может обрабатывать сжатие GZip (например, браузер, который понимает содержимое gzip), вы можете напрямую возвращать сжатый контент. Обратите внимание, что это компромисс производительности/хранения. Если вы часто запрашиваете сжатые данные, у вас есть более медленная производительность, потому что текст должен каждый раз распаковываться.