JSON型の最大長は可変です。つまり、JSON型にはいくつかのデフォルトの最大長がありますが、VARCHARデータ型と同様の方法で型が使用されている場所で長さを調整できます。したがって、長さが絶対最大長を超えることはできませんが、JSON型の特定のインスタンスに対して定義されている最大長は絶対最大長より短いことがあります。
絶対最大長はJSON型の最大長です。この制限は、16,776,192バイトです。
JSONテキスト データの絶対最大長
- UNICODEの最大長は、8,388,096文字です。
- LATINの最大長は、16,776,192文字です。
8,388,096のUNICODE文字または16,776,192のLATIN文字は、JSON型の絶対最大長である16,776,192バイトに相当します。
最大長を指定しないと、文字セットのデフォルトの最大長が選択されます。指定する場合、長さは最小2文字で文字セットの絶対最大長を超えることはできません。文字セットが指定されていない場合、ユーザーの文字セットが使用されます。
JSONバイナリ データの絶対最大長
バイナリ ストレージ形式を使用したJSON型の最大長は、16,776,192バイトです。
バイナリ データの長さが、同じデータのテキスト表現の長さ以下になるとは限りません。したがって、最大長xでテキストとして格納されているJSON列に収まるJSONデータが、 最大長xでバイナリ形式で格納されているJSON列に収まらない可能性があります(逆の場合も同様)。データが確実に収まるように、慎重に長さを選択する必要があります。
JSONバイナリ形式列の最大長の決定
バイナリ形式を使用するJSON列に指定する長さは、バイナリ形式のデータが収まる長さにする必要があります。ただし、データは取得するときに相当するテキストに変換されます。バイナリ形式の文字列がUTF8で格納されている場合、このデータは取得するときにUNICODEに変換されます。
テキスト表現で格納するには長さが十分でないデータは、バイナリ形式で格納できますが、テキスト形式で取得することはできません。大きいサイズにキャストせずにデータを選択するとエラーが報告されます。したがって、列の適切な長さを決定するには、いくつかの計画が必要です。次の例は、この長さを決定する方法を示します。
- サポートされているロード ユーティリティのいずれかを使用して、CLOB列を含む中間テーブルに複数のバイナリJSONデータをロードできます。
CREATE TABLE clobTable(id INTEGER, c CLOB); /*load many rows of data*/
- 次のような問合わせで、バイナリ形式を使用するJSON列に必要な長さを決定します。
SELECT MAX(NEW JSON(c).StorageSize('BSON')) FROM clobTable;
これは、JSON列の最小可能サイズを決定する方法の1つです。十分な領域があり、JSONを小さくしてパフォーマンス上の利点を享受する必要がない場合は、JSON列を最大可能サイズにすることを推奨します。
最大長の超過
*** JSON value is too large to store in the defined JSON type.
例えば、JSON列に定義されている最大長より大きいデータを挿入するか、またはJSONパラメータがサポートするサイズより大きいデータを渡そうとすると、このエラーが返されます。
- 最大長が大きいほうのJSON型にデータをキャストします。
- 事前定義型(VARCHAR/VARBYTE/CLOB/ BLOB)にデータをキャストします。
- AsJSONTextメソッドまたはAsBSONメソッドを使用してデータを選択します。
JSONデータの最大長と格納
- 指定される最大長が64,000バイト(64,000のLATIN文字または32,000のUNICODE文字)以下の場合、テーブルのすべての行のデータはインラインで格納されます。
- 指定される最大長が64,000バイトを超える場合、4Kバイト以下のデータを含む行はインラインで格納され、4Kバイトを超えるデータを含む行はLOBサブテーブルで格納されます。この方法で定義されたテーブルでは、データ サイズに応じて一部の行がインラインで格納され、一部の行がLOBサブテーブルで格納されます。