Какой тип данных 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)
?
sql
sql-server
json
DatPT
источник
источник
Ответы:
Конечно, НЕ :
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 байтами на символ. Так вам нужен Unicode? Есть ли в ваших строках символы арабского, иврита, китайского или других неевропейского происхождения? Тогда иди сNVARCHAR
Эти
(N)VARCHAR
колонны в двух вариантах: либо определить максимальную длину , что приводит к 8000 байт или меньше (VARCHAR
до 8000 символов,NVARCHAR
до 4000), или , если этого недостаточно, использовать(N)VARCHAR(MAX)
версии, которые хранят до 2 Гбайт данных.Обновление: SQL Server 2016 будет иметь встроенную поддержку JSON - будет представлен новый
JSON
тип данных (на основе которогоnvarchar
), а такжеFOR JSON
команда для преобразования вывода запроса в формат JSON.Обновление №2: в конечном продукте Microsoft не включила отдельный
JSON
тип данных - вместо этого существует ряд JSON-функций (для упаковки строк базы данных в JSON или для синтаксического анализа JSON в реляционные данные), которые работают со столбцами типаNVARCHAR(n)
источник
NVARCHAR(n)
типами данныхЯ пойду за
nvarchar(max)
. Это должно соответствовать требованиям.Обновление: в SQL Server 2016 и Azure SQL есть много дополнительных собственных возможностей JSON. Это может положительно повлиять на ваш дизайн или подход. Вы можете прочитать это подробнее: https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server
источник
nvarchar
позволяет избежать проблем с сопоставлением, которые в конечном итоге могут возникнуть при использованииvarchar
, но он будет медленнее по производительности запросов, чемvarchar
. Отличный вопрос DBA с дополнительной информацией.Я бы рекомендовал использовать,
nvarchar(max)
если вы планируете использовать функции JSON в SQL 2016 или Azure SQL.Если вы не планируете использовать эти функции, вы можете использовать функции в
varbinary(max)
сочетании сCOMPRESS
(иDECOMPRESS
). Дополнительная информация: https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/23/storing-json-in-sql-server/источник
Рекомендуемый тип данных - NVARCHAR .
См. Https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server?view=sql-server-ver15#store-and-index-json-data- в-SQL-сервер] [1]
источник
nvarchar (max) лучше для этого, также вы можете сделать еще кое-что.
источник