Jaki jest najlepszy typ danych SQL do przechowywania ciągu 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;
}
Którego typu danych SQL powinniśmy użyć do przechowywania takiego ciągu zawierającego JSON?
NVARCHAR(255)
?TEXT
?VARBINARY(MAX)
?
sql
sql-server
json
DatPT
źródło
źródło
Odpowiedzi:
Z pewnością NIE :
TEXT, NTEXT
: te typy są przestarzałe od wersji SQL Server 2005 i nie powinny być używane w nowych programach. UżyjVARCHAR(MAX)
lubNVARCHAR(MAX)
zamiastIMAGE
,VARBINARY(MAX)
:IMAGE
jest przestarzałe, podobnie jakTEXT/NTEXT
i naprawdę nie ma sensu przechowywać ciągu tekstowego w kolumnie binarnej ....Więc zasadniczo pozostawia
VARCHAR(x)
lubNVARCHAR(x)
:VARCHAR
przechowuje ciągi znaków innych niż Unicode (1 bajt na znak) iNVARCHAR
przechowuje wszystko w trybie Unicode 2-bajtowym na znak. Czy potrzebujesz Unicode? Czy masz w swoich ciągach znaków arabski, hebrajski, chiński lub inne znaki spoza Europy Zachodniej? Następnie idź zNVARCHAR
Te
(N)VARCHAR
kolumny są w dwóch smakach: albo zdefiniować maksymalną długość, że wyniki w 8000 bajtów lub mniej (VARCHAR
do 8000 znaków,NVARCHAR
aż do 4000), a jeśli to nie wystarczy, należy wybrać(N)VARCHAR(MAX)
wersje, które pomieszczą do 2 GB danych.Aktualizacja: SQL Server 2016 będzie miał natywną obsługę JSON - zostanie wprowadzony nowy
JSON
typ danych (na którym jest opartynvarchar
), a takżeFOR JSON
polecenie konwertowania danych wyjściowych z zapytania do formatu JSONAktualizacja # 2: w produkcie końcowym Microsoft nie uwzględnił osobnego
JSON
typu danych - zamiast tego istnieje szereg funkcji JSON (do pakowania wierszy bazy danych w JSON lub do parsowania JSON w dane relacyjne), które działają na kolumnach typuNVARCHAR(n)
źródło
NVARCHAR(n)
typach danychPójdę po
nvarchar(max)
. To powinno pasować do wymagań.Aktualizacja: w SQL Server 2016 i Azure SQL jest wiele dodatkowych natywnych możliwości JSON. Może to pozytywnie wpłynąć na Twój projekt lub podejście. Możesz przeczytać to więcej: https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server
źródło
nvarchar
pozwala uniknąć problemów z sortowaniem, które ostatecznie pojawią się podczas używaniavarchar
, ale będzie wolniejsze w wykonywaniu zapytań niżvarchar
. Świetne pytanie DBA z dalszymi informacjami.Polecam,
nvarchar(max)
jeśli planujesz używać funkcji JSON w SQL 2016 lub Azure SQL.Jeśli nie planujesz korzystać z tych funkcji, możesz użyć
varbinary(max)
kombinacji z funkcjamiCOMPRESS
(iDECOMPRESS
). Więcej informacji: https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/23/storing-json-in-sql-server/źródło
Zalecany typ danych to NVARCHAR .
Zobacz https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server?view=sql-server-ver15#store-and-index-json-data- na serwerze sql] [1]
źródło
nvarchar (max) jest do tego lepsze, a także jeszcze jedna rzecz, którą możesz zrobić w ten sposób.
źródło