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)
?確かにNOT:
TEXT, NTEXT
:これらのタイプは非推奨であり、SQL Server 2005の時点では新しい開発には使用しないでください。代わりにVARCHAR(MAX)
またはNVARCHAR(MAX)
を使用してください
IMAGE
、VARBINARY(MAX)
:IMAGE
はTEXT/NTEXT
と同様に非推奨であり、バイナリ列にテキスト文字列を格納しても意味がありません。
つまり、基本的にVARCHAR(x)
またはNVARCHAR(x)
のままになります:VARCHAR
は非Unicode文字列(文字ごとに1バイト)を格納し、NVARCHAR
はすべてを文字ごとに2バイトのUnicodeに格納しますモード。ユニコードが必要ですか?文字列にアラビア語、ヘブライ語、中国語、または他の非ヨーロッパ系文字が含まれている可能性がありますか?次にNVARCHAR
を使用します
(N)VARCHAR
列には2つのフレーバーがあります:8000バイト以下になる最大長を定義する(VARCHAR
最大8000文字、NVARCHAR
最大4000)、またはそうでない場合十分な場合、(N)VARCHAR(MAX)
バージョンを使用します。これは、最大2ギガバイトのデータを保存します。
更新: SQL Server 2016はネイティブJSONをサポートします-新しいJSON
データ型(nvarchar
に基づく)も導入されますクエリからの出力をJSON形式に変換するFOR 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
SQL 2016またはAzure SQLでJSON機能を使用する予定がある場合は、nvarchar(max)
を使用することをお勧めします。
これらの機能を使用する予定がない場合は、varbinary(max)
をCOMPRESS
(およびDECOMPRESS
)関数と組み合わせて使用できます。詳細: https://blogs.msdn.Microsoft.com/sqlserverstorageengine/2015/11/23/storing-json-in-sql-server/
COMPRESSおよびDECOMPRESS機能は、標準のGZip圧縮を使用します。クライアントがGZip圧縮(gzipコンテンツを理解するブラウザなど)を処理できる場合、圧縮されたコンテンツを直接返すことができます。これはパフォーマンス/ストレージのトレードオフであることに注意してください。圧縮データを頻繁にクエリする場合、毎回テキストを解凍する必要があるため、migのパフォーマンスは低下します。