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) は FLOAT の部分集合となります。 |
| Oracle FLOAT(P) | サポートなし |
|
現在なし |
OceanBaseデータベースV4.2.0以降のバージョンでは、すべてのNUMBER型間の変換ルールは次の表のとおりです。表中の「-」は互換モードを跨ぐ場合を示します。
注意
浮動小数点数の
NUMBERとOracleのFLOATはOracleモードでのみ存在し、符号なし固定小数点数はMySQLモードでのみ存在します。Oracleモードでは、インスタント変換(スキーマのみ変更し、データは変更しない変換)が許可されないとは、非空のテーブルは変換できないことを指します。MySQLモードでは、インスタント変換が許可されないとは、データの書き直しが必要であることを指します。インスタント変換が許可されていても、すべてのソース型のデータが対象型に損失なく挿入される保証はありません。例えば、固定小数点数からOracleの
FLOATへの変換などです。
Instant変換の許容 (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 |