ALTER TABLE文を使用して、JSONデータをテキスト形式からバイナリ形式のいずれかに移行することはできません。この変換を実行するには、以下を行なう必要があります。
- ソース テーブルと同じ構造を持つ新しいテーブルを作成し、バイナリ ストレージ形式で定義されたJSON列を含めます。
- INSERT SELECTを使用して新しいテーブルに挿入します。JSONテキスト データは、バイナリ形式に暗黙的にキャストされます。
ある格納形式でデータを格納するために必要な領域が、別の格納形式で同一のデータを格納するために必要な領域と等しいとは限りません。例えば、テキストで格納されているデータがBSONで格納されているデータより小さい場合や、その逆の場合があります。したがって、新しい形式でデータを格納するために必要な領域を決定する必要があります。StorageSizeメソッドを使用すると、新しいテーブルを作成する前にこの分析を実行できます。
例えば、次のような既存のテーブルがあるとします。
CREATE TABLE jsonTextTable(id INTEGER, j JSON(1000) CHARACTER SET LATIN); /*load many rows of data*/
テキストで格納されているJSONデータをBSONで格納されているJSONデータに移行する場合は、次のような問合わせを使用して必要な最大サイズを決定する必要があります。
SELECT MAX(j.StorageSize('BSON')) FROM jsonTextTable;
この問合わせの結果に基づいて新しいテーブルを作成できます。この例では、結果をXとしています。
CREATE TABLE jsonBSONTable(id INTEGER, j JSON(X) STORAGE FORMAT BSON);
INSERT INTO jsonBSONTable SELECT * FROM jsonTextTable;