¿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)
:IMAGE
está 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)
:VARCHAR
almacena cadenas no Unicode (1 byte por carácter) yNVARCHAR
almacena 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 conNVARCHAR
Las
(N)VARCHAR
columnas vienen en dos sabores: usted define una longitud máxima que resulta en 8000 bytes o menos (VARCHAR
hasta 8000 caracteres,NVARCHAR
hasta 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
JSON
tipo de datos (basado ennvarchar
), así como unFOR JSON
comando para convertir la salida de una consulta al formato JSONActualización n. ° 2: en el producto final, Microsoft no incluyó un
JSON
tipo 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
nvarchar
evita 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