Apa tipe data SQL terbaik untuk menyimpan string 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;
}
Jenis data SQL mana yang harus kita gunakan untuk menyimpan string yang berisi JSON?
NVARCHAR(255)
?TEXT
?VARBINARY(MAX)
?
sql
sql-server
json
DatPT
sumber
sumber
Jawaban:
Tentu TIDAK :
TEXT, NTEXT
: jenis tersebut tidak digunakan lagi pada SQL Server 2005 dan tidak boleh digunakan untuk pengembangan baru. GunakanVARCHAR(MAX)
atauNVARCHAR(MAX)
sebagai gantinyaIMAGE
,VARBINARY(MAX)
:IMAGE
sudah tidak digunakan lagiTEXT/NTEXT
, dan tidak ada gunanya menyimpan string teks ke dalam kolom biner ....Sehingga pada dasarnya meninggalkan
VARCHAR(x)
atauNVARCHAR(x)
:VARCHAR
menyimpan string non-Unicode (1 byte per karakter) danNVARCHAR
menyimpan semuanya dalam mode Unicode 2-byte-per-karakter. Jadi, apakah Anda membutuhkan Unicode? Apakah Anda berpotensi memiliki karakter Arab, Ibrani, China, atau non-Eropa Barat lainnya dalam string Anda? Lalu pergi denganNVARCHAR
The
(N)VARCHAR
kolom datang dalam dua rasa: baik Anda menentukan panjang maksimum yang menghasilkan 8000 bytes atau kurang (VARCHAR
hingga 8000 karakter,NVARCHAR
hingga 4000), atau jika itu tidak cukup, gunakan(N)VARCHAR(MAX)
versi, yang menyimpan hingga 2 GByte data.Pembaruan: SQL Server 2016 akan memiliki dukungan JSON asli -
JSON
tipe data baru (yang didasarkan padanvarchar
) akan diperkenalkan, sertaFOR JSON
perintah untuk mengonversi keluaran dari kueri ke dalam format JSONPembaruan # 2: di produk akhir, Microsoft tidak menyertakan
JSON
tipe data terpisah - sebagai gantinya, ada sejumlah fungsi JSON (untuk mengemas baris database menjadi JSON, atau untuk mengurai JSON menjadi data relasional) yang beroperasi pada kolom tipeNVARCHAR(n)
sumber
NVARCHAR(n)
tipe dataAku akan pergi
nvarchar(max)
. Itu harus sesuai dengan kebutuhan.Pembaruan: Dengan SQL Server 2016 dan Azure SQL, ada banyak kemampuan JSON asli tambahan. Ini mungkin berdampak positif pada desain atau pendekatan Anda. Anda dapat membaca ini untuk lebih lanjut: https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server
sumber
nvarchar
menghindari masalah pemeriksaan yang pada akhirnya akan Anda alami saat menggunakanvarchar
, tetapi akan lebih lambat dalam kinerja kueri daripadavarchar
. Pertanyaan DBA hebat dengan info lebih lanjut.Saya akan merekomendasikan untuk digunakan
nvarchar(max)
jika Anda berencana menggunakan fitur JSON di SQL 2016 atau Azure SQL.Jika Anda tidak berencana untuk menggunakan fitur tersebut, Anda dapat menggunakan
varbinary(max)
kombinasi denganCOMPRESS
(danDECOMPRESS
) fungsi. Informasi lebih lanjut: https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/23/storing-json-in-sql-server/sumber
Jenis data yang direkomendasikan adalah NVARCHAR .
Silakan lihat https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server?view=sql-server-ver15#store-and-index-json-data- dalam-sql-server] [1]
sumber
nvarchar (max) lebih baik untuk ini, juga satu hal lagi yang dapat Anda lakukan seperti ini.
sumber