Was ist der beste SQL-Datentyp zum Speichern von JSON-Zeichenfolgen?
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;
}
Welchen SQL-Datentyp sollten wir zum Speichern einer solchen Zeichenfolge verwenden, die JSON enthält?
NVARCHAR(255)
?TEXT
?VARBINARY(MAX)
?
sql
sql-server
json
DatPT
quelle
quelle
Antworten:
Sicher NICHT :
TEXT, NTEXT
: Diese Typen sind ab SQL Server 2005 veraltet und sollten nicht für Neuentwicklungen verwendet werden. Verwenden SieVARCHAR(MAX)
oderNVARCHAR(MAX)
stattdessenIMAGE
,VARBINARY(MAX)
:IMAGE
ist genauso veraltet wieTEXT/NTEXT
und es macht wirklich keinen Sinn, eine Textzeichenfolge in einer Binärspalte zu speichern ....Das bedeutet also im Grunde genommen :
VARCHAR(x)
oder speichert Nicht-Unicode-Zeichenfolgen (1 Byte pro Zeichen) und speichert alles in einem Unicode-Modus mit 2 Byte pro Zeichen. Benötigen Sie Unicode? Haben Sie möglicherweise arabische, hebräische, chinesische oder andere nicht-westeuropäische Schriftzeichen in Ihren Zeichenfolgen? Dann geh mitNVARCHAR(x)
VARCHAR
NVARCHAR
NVARCHAR
Die
(N)VARCHAR
Spalten sind in zwei Varianten erhältlich: Entweder definieren Sie eine maximale Länge, die 8000 Byte oder weniger ergibt (VARCHAR
bis zu 8000 Zeichen,NVARCHAR
bis zu 4000), oder wenn dies nicht ausreicht, verwenden Sie die(N)VARCHAR(MAX)
Versionen, in denen bis zu 2 GByte Daten gespeichert sind.Update: SQL Server 2016 wird native JSON-Unterstützung bieten - ein neuer
JSON
Datentyp (der darauf basiertnvarchar
) wird eingeführt sowie einFOR JSON
Befehl zum Konvertieren der Ausgabe einer Abfrage in das JSON-FormatUpdate Nr. 2: Microsoft hat im Endprodukt keinen separaten
JSON
Datentyp hinzugefügt. Stattdessen gibt es eine Reihe von JSON-Funktionen (zum Packen von Datenbankzeilen in JSON oder zum Parsen von JSON in relationale Daten), die mit Spalten des Typs arbeitenNVARCHAR(n)
quelle
NVARCHAR(n)
Datentypen arbeitenIch werde gehen für
nvarchar(max)
. Das sollte der Anforderung entsprechen.Update: Mit SQL Server 2016 und Azure SQL gibt es viele zusätzliche native JSON-Funktionen. Dies kann sich positiv auf Ihr Design oder Ihren Ansatz auswirken. Weitere Informationen finden Sie unter: https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server
quelle
nvarchar
die Sortierprobleme vermieden, die bei der Verwendung auftreten könnenvarchar
, die Abfrageleistung ist jedoch langsamer als beivarchar
. Tolle DBA-Frage mit weiteren Infos.Ich würde die Verwendung empfehlen,
nvarchar(max)
wenn Sie JSON-Funktionen in SQL 2016 oder Azure SQL verwenden möchten .Wenn Sie diese Funktionen nicht verwenden möchten, können Sie
varbinary(max)
sie mitCOMPRESS
(undDECOMPRESS
) kombinieren . Weitere Informationen: https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/23/storing-json-in-sql-server/quelle
Der empfohlene Datentyp ist NVARCHAR .
Weitere Informationen finden Sie unter 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]
quelle
nvarchar (max) ist dafür besser, auch eine Sache, die Sie so machen können.
quelle