¿Cuál es el mejor tipo de datos SQL para almacenar cadenas 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;
}
¿Qué tipo de datos SQL deberíamos usar para almacenar una cadena que contenga JSON?
NVARCHAR(255)?TEXT?VARBINARY(MAX)?
sql
sql-server
json
DatPT
fuente
fuente

Respuestas:
Ciertamente NO :
TEXT, NTEXT: esos tipos están en desuso a partir de SQL Server 2005 y no deben usarse para nuevos desarrollos. UseVARCHAR(MAX)o en suNVARCHAR(MAX)lugarIMAGE,VARBINARY(MAX):IMAGEestá en desuso comoTEXT/NTEXT, y realmente no tiene sentido almacenar una cadena de texto en una columna binaria ...De modo que básicamente deja
VARCHAR(x)oNVARCHAR(x):VARCHARalmacena cadenas no Unicode (1 byte por carácter) yNVARCHARalmacena todo en un modo Unicode de 2 bytes por carácter. Entonces, ¿necesitas Unicode? ¿Tiene potencialmente caracteres en árabe, hebreo, chino u otros caracteres no europeos occidentales? Entonces ve conNVARCHARLas
(N)VARCHARcolumnas vienen en dos sabores: usted define una longitud máxima que resulta en 8000 bytes o menos (VARCHARhasta 8000 caracteres,NVARCHARhasta 4000), o si eso no es suficiente, use las(N)VARCHAR(MAX)versiones, que almacenan hasta 2 GByte de datos.Actualización: SQL Server 2016 tendrá soporte JSON nativo: se introducirá un nuevo
JSONtipo de datos (basado ennvarchar), así como unFOR JSONcomando para convertir la salida de una consulta al formato JSONActualización n. ° 2: en el producto final, Microsoft no incluyó un
JSONtipo de datos separado ; en cambio, hay una serie de funciones JSON (para agrupar las filas de la base de datos en JSON o analizar JSON en datos relacionales) que operan en columnas de tipoNVARCHAR(n)fuente
NVARCHAR(n)tipos de datosIré por
nvarchar(max). Eso debería ajustarse al requisito.Actualización: con SQL Server 2016 y Azure SQL, hay muchas capacidades JSON nativas adicionales. Esto podría impactar positivamente su diseño o enfoque. Puede leer esto para obtener más información: https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server
fuente
nvarcharevita los problemas de intercalación que eventualmente tendrá al usarvarchar, pero será más lento en el rendimiento de la consulta quevarchar. Gran pregunta de DBA con más información.Recomendaría usar
nvarchar(max)si planea usar características JSON en SQL 2016 o Azure SQL.Si no planea usar esas características, puede usarlas
varbinary(max)combinadas conCOMPRESS(yDECOMPRESS) funciones. Más información: https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/23/storing-json-in-sql-server/fuente
El tipo de datos recomendado es NVARCHAR .
Consulte https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server?view=sql-server-ver15#store-and-index-json-data- en el servidor sql] [1]
fuente
nvarchar (max) es mejor para esto, también una cosa más que puedes hacer así.
fuente