OceanBaseデータベースにおけるNUMBER型のストレージ形式はすべて同じですが、値域の定義に基づいて以下の表のように4種類の形式に分類できます。
| ストレージタイプ | MySQLモードのデフォルトストレージ規則 | Oracleモードのデフォルトストレージ規則 | 説明 |
|---|---|---|---|
| 固定小数点数 DECIMAL(M,D) = {10^{-D}*i | i = 0,1,...,10^M-1} ここで、Mは自然数、Dは整数 |
|
|
固定小数点数(M1,D1)が固定小数点数(M2,D2)の部分集合であるためには、D1 <= D2かつM1-D1 <= M2-D2でなければなりません。 |
| 置換え符号なし固定小数点数 DECIMAL(M,D) |
|
サポートされていません | 置換え符号なし固定小数点数は、固定小数点数DECIMAL(M,D)の非負数に相当します |
| 浮動小数点数 NUMBER | サポートされていません | NUMBER | Oracleモードの浮動小数点数NUMBERは、全精度が38ビットの浮動小数点数であり、決してNUMBER(M, D)の部分集合ではありません。また、M-D <= 38である場合に限り、NUMBER(M, D)はその部分集合となります。 |
| Oracle FLOAT(P) | サポートされていません |
|
なし |
OceanBaseデータベースV4.2.0以降のバージョンでは、すべてのNUMBER型間の変換ルールは以下の表のとおりです。表内の「-」は互換モードをまたいでいる場合を示します。
注意
浮動小数点数の
NUMBERと Oracle のFLOATはOracleモードにのみ存在し、符号なし固定小数点数はMySQLモードにのみ存在します。Oracleモードでは、Instant変換(スキーマのみを変更し、データの変換は行わない)が許可されない場合、それは空ではないテーブルを変換できないことを意味します。MySQLモードでは、Instant変換が許可されない場合、それはデータの書き換えが必要であることを意味します。たとえInstant変換が許可されていても、すべてのソース型のデータを損失なくターゲット型に挿入できるとは限らず、例えば固定小数点数をOracleの
FLOATに変換する場合などです。
| インスタント変換の許可(From\To) | 固定小数点数(M2,D2) | 置換え無し固定小数点数(M2,D2) | 浮動小数点数 NUMBER | Oracle FLOAT(P2) |
|---|---|---|---|---|
| 固定小数点数(M1,D1) | 変換条件: D1 <= D2 かつ M1-D1 <= M2-D2 | サポートなし | 変換条件:M-D <= 38 | 変換条件:M1-D1 <=ceil(P*0.30103) |
| 置換え無し固定小数点数(M1,D1) UNSIGNED | 変換条件:D1 <= D2 かつ M1-D1 <= M2-D2 | 変換条件:D1 <= D2 かつ M1-D1 <= M2-D2 | - | - |
| 浮動小数点数 NUMBER | サポートなし | - | サポートあり | サポートなし |
Oracle FLOAT(P1) |
サポートなし | - | サポートあり | 変換条件:P1 <= P2 |