[sql] JSON 문자열 저장에 가장 적합한 SQL 데이터 유형은 무엇입니까?
JSON 문자열을 저장하는 데 가장 적합한 SQL 데이터 유형은 무엇입니까?
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;
}
JSON이 포함 된 문자열을 저장하려면 어떤 SQL 데이터 유형을 사용해야합니까?
NVARCHAR(255)
?TEXT
?VARBINARY(MAX)
?
답변
확실히 아닙니다 :
-
TEXT, NTEXT
: 이러한 유형은 SQL Server 2005에서 더 이상 사용되지 않으며 새로운 개발에 사용해서는 안됩니다. 사용VARCHAR(MAX)
또는NVARCHAR(MAX)
대신 -
IMAGE
,VARBINARY(MAX)
:IMAGE
는처럼 더 이상 사용되지 않으며TEXT/NTEXT
텍스트 문자열을 이진 열에 저장할 필요가 없습니다 ….
따라서 기본적으로 leave VARCHAR(x)
또는 NVARCHAR(x)
: VARCHAR
는 비 유니 코드 문자열 (문자 당 1 바이트)을 NVARCHAR
저장하고 모든 것을 문자 당 2 바이트 유니 코드 모드로 저장합니다. 그렇다면 유니 코드가 필요합니까? 문자열에 아랍어, 히브리어, 중국어 또는 기타 비서 유럽 문자가 잠재적으로 있습니까? 그런 다음NVARCHAR
(N)VARCHAR
열은 두 가지 종류로 제공 : 하나는 8000 바이트 이하 (결과하는 최대 길이 정의 VARCHAR
최대 8000 자, NVARCHAR
그 충분하지 않습니다 경우 최대 4000가), 또는 사용 (N)VARCHAR(MAX)
데이터의 2 기가 바이트까지 저장할 버전.
업데이트 : SQL Server 2016 에는 네이티브 JSON 지원이 포함됩니다. 새로운 JSON
데이터 유형 (을 기반으로 함 nvarchar
)과 FOR JSON
쿼리의 출력을 JSON 형식으로 변환 하는 명령 이 도입 됩니다.
업데이트 # 2 : 최종 제품에서 Microsoft는 별도의 JSON
데이터 유형을 포함하지 않았습니다. 대신 유형의 열에서 작동하는 여러 JSON 함수 (데이터베이스 행을 JSON으로 패키징하거나 JSON을 관계형 데이터로 구문 분석)가 있습니다.NVARCHAR(n)
답변
나는 갈 nvarchar(max)
것이다. 요구 사항에 맞아야합니다.
업데이트 :
SQL Server 2016 및 Azure SQL에는 많은 추가 네이티브 JSON 기능이 있습니다. 이는 디자인이나 접근 방식에 긍정적 인 영향을 미칠 수 있습니다. 자세한 내용은 https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server 를 읽을 수 있습니다.
답변
nvarchar(max)
SQL 2016 또는 Azure SQL에서 JSON 기능을 사용하려는 경우 사용 하는 것이 좋습니다 .
이러한 기능을 사용할 계획이없는 경우 (및 ) 기능 과 varbinary(max)
함께 사용할 수 있습니다 . 추가 정보 : https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/23/storing-json-in-sql-server/COMPRESS
DECOMPRESS
COMPRESS 및 DECOMPRESS 기능은 표준 GZip 압축을 사용합니다. 클라이언트가 GZip 압축을 처리 할 수있는 경우 (예 : gzip 콘텐츠를 이해하는 브라우저) 압축 된 콘텐츠를 직접 반환 할 수 있습니다. 이것은 성능 / 스토리지 트레이드 오프입니다. 압축 된 데이터를 자주 쿼리하는 경우 텍스트를 매번 압축 해제해야하므로 마이그레이션 성능이 느려집니다.
답변
권장 데이터 유형은 NVARCHAR 입니다. 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]
답변
nvarchar (max)는 이것에 더 좋습니다. 또한 이와 같이 할 수있는 한 가지 더 있습니다.
public class TableName
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
public string FieldJson { get; set; } //save json in this field and
[NotMapped]
public List<FieldList> FieldList // get return list from this properity
{
get => !string.IsNullOrEmpty(FieldJson) ? JsonConvert.DeserializeObject<List<FieldList>>(FieldJson) : null;
}
}