OceanBaseデータベースのMySQLモードで列型を変更する場合、まずテーブルレベルの列型変更ルール、特に一部のデータ型の禁止シナリオを考慮する必要があります。次に、列型変更におけるソースデータ型とターゲットデータ型の変更ルールを考慮します。
テーブル単位の列型変更ルール
禁止ルール
外部キー制約
Online DDLとOffline DDLにおいて、以下の特別な場合を除き(注意:関連する型の変更は表示精度のみを変更し、格納構造は変更しない)、外部キー列の型変更はサポートされません。
列のデータ型が
FLOAT(m,n)の場合、精度の変更はサポートされますが、SIGNEDとUNSIGNEDの相互変換はサポートされません。列のデータ型が
DOUBLE(m,n)の場合、精度の変更はサポートされますが、SIGNEDとUNSIGNEDの相互変換はサポートされません。列のデータ型が
VARCHAR(m)の場合、精度の引き上げはサポートされますが、精度の引き下げやCHAR型への変更はサポートされません。
CHECK制約Online DDLとOffline DDLにおいて、整数型(
INTEGER)の列を除き、CHECK制約を持つ列の型変更はサポートされません。Trigger制約
Offline DDLのみに適用されます。列に
DISABLE以外のTrigger制約がある場合、列型の変更は禁止されます。すべてのTriggerがDISABLEである場合、DDL操作には影響せず、新しいテーブルにもこのDISABLEのTriggerを含める必要があります。
変更ルール
同一データ型で長さが長くなる場合、例えばある列のデータ型を
VARCHAR(8)からVARCHAR(11)に変更する操作は、Online DDLとして実行でき、データの再書き込みは不要です。- Online DDLで列の長さを変更する際、その列にインデックステーブルが存在する場合(例:
VARCHAR型の長さが長くなる場合)、Online DDLで変更すると同時に、インデックステーブルなどの依存オブジェクトのスキーマも修正する必要があります。つまり、「ユーザーが想定するデータの変更はないが、依存オブジェクトのスキーマも修正する必要がある」ということです。 INTEGERおよびDecimalInt型の列について、それらがインデックス列または主キー列である場合、列型の拡張操作はOnline DDLで実行できます。
- Online DDLで列の長さを変更する際、その列にインデックステーブルが存在する場合(例:
OceanBaseデータベースでは、
LOB型の拡張に対して、Online DDL操作は以下の状況をサポートします:- 通常の列の変更。
- 生成列(Store/Virtual)としての変更
- 生成列に依存する(Store/Virtual)変更
NOT NULLおよびCHECK制約の追加。- 既存の
NOT NULL制約の変更。
数値データ型において、
SIGNEDとUNSIGNEDの変換が発生する場合、型変更が許可される場合でも、Offline操作を実行する必要があります。文字データ型において、文字セットや照合順序(Collation)の変更が発生する場合、列型変更が許可される場合でも、Offline操作を実行する必要があります。ある列が生成列に参照されている場合、列型の変更操作は許可されます。
列レベルの変換ルール
OceanBaseデータベースでは、すべての列データ型は数値データ型、文字データ型、時間データ型の3つの大きなカテゴリに分類されます。これら3つの大カテゴリ内での変換ルールは類似しており、各大カテゴリ間での変更ルールも類似していますが、いくつかの特別なケースもあります。
以下の各表は、それぞれの大カテゴリ内部および大カテゴリ間の変換状況を列挙したものです。
数値データ型間の変換
数値データ型は以下のように分類されます:
整数型:
TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT浮動小数点数型:
FLOAT、DOUBLE固定小数点数型:
NUMBERバイナリ:
BIT
次の表は、数値データ型間の変換を示しています。
データ型 |
To TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT |
To FLOAT、DOUBLE |
To NUMBER |
To BIT |
|---|---|---|---|---|
| 整数型 | サポート | サポート | サポート | サポート |
| 浮動小数点数型 | サポート | サポート | サポート | サポート |
| 固定小数点数型 | サポート | サポート | サポート | サポート |
| バイナリ | サポート | サポート | サポート | サポート |
文字データ型間の変換
文字データ型は以下のように分類されます:
CHAR、VARCHARBINARY、VARBINARYTEXT大型データ型:TINYTEXT、MEDIUMTEXT、TEXT、LONGTEXTBLOB大型データ型:TINYBLOB、MEDIUMBLOB、BLOB、LONGBLOBENUM、SET
次の表は、文字データ型間の変換を示しています。
データ型 |
To CHAR |
To BINARY |
To VARCHAR\ VARBINARY |
To TEXT\ BLOB |
To ENUM\ SET |
|---|---|---|---|---|---|
CHAR |
サポート | サポート | サポート | サポート | サポート |
BINARY |
サポート | サポート | サポート | サポート | サポート |
VARCHAR、 VARBINARY |
サポート | サポート | サポート | サポート | サポート |
TEXT大型データ型、 BLOB 大型データ型 |
サポート | サポート | サポート | サポート | サポート |
ENUM、 SET |
サポート | サポート | サポート | サポート | サポート |
時間型データ型間の変換
時間データ型は以下のとおりです:
DATETIMESTAMPDATETIMETIMEYEAR
次の表は、時間型データ型間の変換ルールを示しています。
データ型 |
To DATE |
To TIMESTAMP |
DATETIME |
TIME |
YEAR |
|---|---|---|---|---|---|
DATE |
サポート | サポート | サポート | サポート | サポート |
TIMESTAMP |
サポート | サポート | サポート | サポート | サポート |
DATETIME |
サポート | サポート | サポート | サポート | サポート |
TIME |
サポート | サポート | サポート | サポート | サポート |
YEAR |
サポート | サポート | サポート | サポート | サポート |
数値型と文字型間の変換
数値型と文字型間の変換ルールは次の表のとおりです。
データ型 |
To 整数型、浮動小数点数型、固定小数点数型 |
To BIT型 |
To CHAR、BINARY、VARCHAR、VARBINARY、TEXT、BLOB |
To ENUM、SET |
|---|---|---|---|---|
| 整数型、浮動小数点数型、固定小数点数型 | 主要なデータ型間の変換ルールを参照してください。 | 主要なデータ型間の変換ルールを参照してください。 | サポート | サポート |
BIT型 |
主要なデータ型間の変換ルールを参照してください。 | 主要なデータ型間の変換ルールを参照してください。 | サポート | サポート |
CHAR、BINARY、VARCHAR、VARBINARY、TEXT、BLOB |
サポート | サポート | 主要なデータ型間の変換ルールを参照してください。 | サポート |
ENUM、SET |
サポート | サポート | 主要なデータ型間の変換ルールを参照してください。 | 主要なデータ型間の変換ルールを参照してください。 |
数値型と時系列型の相互変換
数値型と時系列型の相互変換の仕様は、次の表のとおりです。
データ型 |
To整数型、浮動小数点型、固定小数点型、 BIT |
To DATE |
To DATETIME |
To TIMESTAMP |
To TIME |
To YEAR |
|---|---|---|---|---|---|---|
整数型、浮動小数点型、固定小数点型、BIT |
主要なデータ型間の変換ルールを参照してください。 | サポート | サポート | サポート | サポート | サポート |
DATE |
サポート | 主要なデータ型間の変換ルールを参照してください。 | 主要なデータ型間の変換ルールを参照してください。 | 主要なデータ型間の変換ルールを参照してください。 | 主要なデータ型間の変換ルールを参照してください。 | 主要なデータ型間の変換ルールを参照してください。 |
DATETIME |
サポート | 主要な変換ルールを参照してください。 | 主要な変換ルールを参照してください。 | 主要な変換ルールを参照してください。 | 主要な変換ルールを参照してください。 | 主要な変換ルールを参照してください。 |
TIMESTAMP |
サポート | 主要な変換ルールを参照してください。 | 主要な変換ルールを参照してください。 | 主要な変換ルールを参照してください。 | 主要な変換ルールを参照してください。 | 主要な変換ルールを参照してください。 |
TIME |
サポート | 主要な変換ルールを参照してください。 | 主要な変換ルールを参照してください。 | 主要な変換ルールを参照してください。 | 主要な変換ルールを参照してください。 | 主要な変換ルールを参照してください。 |
YEAR |
サポート | 各カテゴリ内の変換ルールを参照してください。 | 各カテゴリ内の変換ルールを参照してください。 | 各カテゴリ内の変換ルールを参照してください。 | 各カテゴリ内の変換ルールを参照してください。 | 各カテゴリ内の変換ルールを参照してください。 |
文字列データ型と時系列データ型間の変換
文字列データ型と時系列データ型間の変換は、次の表のとおりです。
データ型 |
To CHAR、BINARY 、VARCHAR 、VARBINARY 、TEXT 大类、 BLOB 大类 |
To ENUM、 SET |
To DATE |
To DATETIME |
To TIMESTAMP |
To TIME |
To YEAR |
|---|---|---|---|---|---|---|---|
CHAR、BINARY、VARCHAR、VARBINARY 、TEXT 大类、BLOB 大类 |
各データ型の変換ルールを参照してください。 | 各データ型の変換ルールを参照してください。 | サポート | サポート | サポート | サポート | サポート |
ENUM、 SET |
各データ型の変換ルールを参照してください。 | 各データ型の変換ルールを参照してください。 | サポート | サポート | サポート | サポート | サポート |
DATE |
サポート | サポート | 各データ型の変換ルールを参照してください。 | 各データ型の変換ルールを参照してください。 | 各データ型の変換ルールを参照してください。 | 各データ型の変換ルールを参照してください。 | |
DATETIME |
サポート | サポート | 同一カテゴリ内の変換ルールを参照してください。 | 同一カテゴリ内の変換ルールを参照してください。 | 同一カテゴリ内の変換ルールを参照してください。 | 同一カテゴリ内の変換ルールを参照してください。 | 同一カテゴリ内の変換ルールを参照してください。 |
TIMESTAMP |
サポート | サポート | 同一カテゴリ内の変換ルールを参照してください。 | 同一カテゴリ内の変換ルールを参照してください。 | 同一カテゴリ内の変換ルールを参照してください。 | 同一カテゴリ内の変換ルールを参照してください。 | 同一カテゴリ内の変換ルールを参照してください。 |
TIME |
サポート | サポート | 項目の分類に含まれる変換ルールを参照してください。 | 項目の分類に含まれる変換ルールを参照してください。 | 項目の分類に含まれる変換ルールを参照してください。 | 項目の分類に含まれる変換ルールを参照してください。 | 項目の分類に含まれる変換ルールを参照してください。 |
YEAR |
サポート | サポート | 項目の分類に含まれる変換ルールを参照してください。 | 項目の分類に含まれる変換ルールを参照してください。 | 項目の分類に含まれる変換ルールを参照してください。 | 項目の分類に含まれる変換ルールを参照してください。 | 項目の分類に含まれる変換ルールを参照してください。 |
Online DDLによる列型の上位互換変換のシナリオ
整数型の変換
データ型 |
To SMALLINT |
To MEDIUMINT |
To INT |
To BIGINT |
|---|---|---|---|---|
| TINYINT | サポート | サポート | サポート | サポート |
| SMALLINT | N/A | サポート | サポート | サポート |
| MEDIUMINT | サポートなし | N/A | サポート | サポート |
| INT | サポートなし | サポートなし | N/A | サポート |
データ型 |
To USMALLINT |
To UMEDIUMINT |
To UINT |
To UBIGINT |
|---|---|---|---|---|
| UTINYINT | サポート | サポート | サポート | サポート |
| USMALLINT | N/A | サポート | サポート | サポート |
| UMEDIUMINT | サポートなし | N/A | サポート | サポート |
| UINT | サポートなし | サポートなし | N/A | サポート |
DECIMAL/DECIMALINT
DECIMAL(precision, scale) は10進数データ型を表し、precision は数値の全長、scale は小数部の桁数を表します。Online DDLにおける precision の範囲は [1, 9]、[10, 18]、[19, 38]、[39, 65] です。
注意
- Oracleモードでは
precisionの最大値は38です。 - MySQLモードでは
precisionの最大値は65です。
precision の範囲が同じで scale が変わらない場合、基盤となる物理ストレージは変更されません。Online DDLを使用して変更できます。例えば、DECIMAL(10, 2) から DECIMAL(12, 2) への変更は、Online DDLを使用して行えます。
最初のパラメータ
precisionの変更について、長くする場合(precisionを増やす場合)は、Online DDLを使用して変更できます。例えば、DECIMAL(10, 2)からDECIMAL(12, 2)への変更は、Online DDLを使用して行えます。しかし、短くする場合(precisionを減らす場合)は、Online DDLでは変更できず、Offline DDLを使用して変更する必要があります。区間をまたぐ変更もOffline DDLを使用して行う必要があります。2番目のパラメータ
scaleの変更について、長くする場合も短くする場合も、Online DDLは使用できず、Offline DDLを使用して変更する必要があります。例えば、DECIMAL(10, 2)からDECIMAL(10, 4)への変更や、DECIMAL(10, 2)からDECIMAL(10, 1)への変更は、Offline DDLを使用して行う必要があります。
VARCHARの可変長化
VARCHAR(x) を VARCHAR(y) に変換する場合、y の長さが x の長さ以上であれば、Online DDLを使用して列型を上位互換的に変更できます。例えば、VARCHAR(10) を VARCHAR(20) に変換する場合、Online DDLを使用して列型を変更できます。
VARBINARYの可変長化
VARBINARY(x) を VARBINARY(y) に変換する場合、y の長さが x の長さ以上であれば、Online DDLを使用して列型を上位互換的に変更できます。例えば、VARBINARY(10) を VARBINARY(20) に変換する場合、Online DDLを使用して列型を変更できます。
バイト列データ型
注意
LOB 列はインデックスや主キーとして使用できません。
データ型 |
To MEDIUMBLOB |
To LONGBLOB |
|---|---|---|
| BLOB | サポート | サポート |
| MEDIUMBLOB | N/A | サポート |
データ型 |
To MEDIUMTEXT |
To LONGTEXT |
|---|---|---|
| TEXT | サポート | サポート |
| MEDIUMTEXT | N/A | サポート |
VARCHARとTINYTEXTの相互変換
データ型 |
To VARCHAR(x),x>=255 |
To TINYTEXT |
|---|---|---|
| TINYTEXT | サポート | N/A |
| VARCHAR(x),x<=255 | N/A | サポート |
VARBINARYとTINYBLOBの相互変換
データ型 |
To VARBINARY(x),x>=255 |
To TINYBLOB |
|---|---|---|
| TINYBLOB | サポート | N/A |
| VARBINARY(x),x<=255 | N/A | サポート |