整数型は固定長で正確な数値型であり、値の範囲は型の長さと符号があるかどうかによって決まります。Precisionは最小表示幅を示すだけです。
OceanBaseデータベースでサポートされている各整数型に必要なストレージ長と値の範囲は、次の表のとおりです。
型 |
長さ(バイト) |
値の範囲(符号あり) |
値の範囲(符号なし) |
|---|---|---|---|
BOOL/BOOLEAN/TINYINT |
1 | [-27, 27 - 1] | [0, 28 - 1] |
SMALLINT |
2 | [-215, 215 - 1] | [0, 216 - 1] |
MEDIUMINT |
3 | [-223, 223 - 1] | [0, 224 - 1] |
INT/INTEGER |
4 | [-231, 231 - 1] | [0, 232 - 1] |
BIGINT |
8 | [-263, 263 - 1] | [0, 264 - 1] |
SERIAL |
8 | N/A | [0, 264 - 1] |
TINYINT
TINYINTは非常に小さい整数を表すために使用されます。構文は以下のとおりです:
TINYINT[(M)] [UNSIGNED] [ZEROFILL]
Mは最大表示幅を表します。最大表示幅は255です。表示幅は格納可能な値の範囲とは関係ありません。数値列にZEROFILLを指定すると、OceanBaseデータベースは自動的にその列にUNSIGNED属性を追加します。
BOOL/BOOLEAN
BOOL/BOOLEAN型はTINYINTの同義語です。ゼロ値はエラーを表し、非ゼロ値は正解を表します。
例:
obclient> SELECT IF(0, 'true', 'false');
+------------------------+
| IF(0, 'true', 'false') |
+------------------------+
| false |
+------------------------+
1 row in set
obclient> SELECT IF(1, 'true', 'false');
+------------------------+
| IF(1, 'true', 'false') |
+------------------------+
| true |
+------------------------+
1 row in set
obclient> SELECT IF(2, 'true', 'false');
+------------------------+
| IF(2, 'true', 'false') |
+------------------------+
| true |
+------------------------+
1 row in set
obclient> SELECT IF(2 = FALSE, 'true', 'false');
+--------------------------------+
| IF(2 = FALSE, 'true', 'false') |
+--------------------------------+
| false |
+--------------------------------+
1 row in set
SMALLINT
SMALLINTは小さな整数を表すために使用されます。構文は以下のとおりです:
SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
Mは最大表示幅を表します。最大表示幅は255です。表示幅は格納可能な値の範囲とは関係ありません。数値列にZEROFILLを指定すると、OceanBaseデータベースは自動的にその列にUNSIGNED属性を追加します。
MEDIUMINT
MEDIUMINTは中程度の大きさの整数を表すために使用されます。
構文は以下のとおりです:
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
Mは最大表示幅を表します。最大表示幅は255です。表示幅は格納可能な値の範囲とは関係ありません。数値列にZEROFILLを指定すると、OceanBaseデータベースは自動的にその列にUNSIGNED属性を追加します。
INT/INTEGER
INTまたはINTEGERは通常サイズの整数を表すために使用されます。構文は以下のとおりです:
INT[(M)] [UNSIGNED] [ZEROFILL]
INTEGER[(M)] [UNSIGNED] [ZEROFILL]
Mは最大表示幅を表します。最大表示幅は255です。表示幅は格納可能な値の範囲とは関係ありません。数値列にZEROFILLを指定すると、OceanBaseデータベースは自動的にその列にUNSIGNED属性を追加します。
また、OceanBaseデータベースは拡張型INT2とINT4もサポートしていますが、INT4の代わりにINTの使用を推奨します。
BIGINT
BIGINTは大整数を表すために使用されます。構文は以下のとおりです:
BIGINT[(M)] [UNSIGNED] [ZEROFILL]
Mは最大表示幅を表します。最大表示幅は255です。表示幅は格納できる値の範囲とは関係ありません。数値列にZEROFILLを指定すると、OceanBaseデータベースはその列に自動的にUNSIGNED属性を追加します。
BIGINTについては、以下の点に注意してください:
すべての演算では符号付きの
BIGINTまたはDOUBLE型の値を使用する必要があるため、9223372036854775807(63ビット)を超える符号なしの大整数は使用しないでください(BIT関数は除く)。そうでない場合、BIGINT値をDOUBLEに変換する際に四捨五入エラーが発生し、結果の最後の桁が誤ってしまう可能性があります。文字列を使用して
BIGINTを格納することで、常に正確な整数値をBIGINT列に格納できます。この場合、文字列から数値への変換を実行する際に、倍精度の中間変換は行われません。両方の演算子が整数値の場合、-、+、*演算子は
BIGINT演算を使用します。2つの大整数(または関数が返す整数結果)を掛け合わせた結果が9223372036854775807を超えると、異常な結果が得られる可能性があります。
SERIAL
SERIAL データ型は、自動インクリメントされる大整数(広範囲の数値)列を表すために使用されます。列定義で SERIAL データ型を使用すると、実際には以下の列属性が定義されます:
BIGINT:非常に大きな数を格納できる大整数データ型です。UNSIGNED:この整数は符号なしであり、正の数または0のみを取り得ることを示します。NOT NULL:列の値はNULLを許容せず、各行には必ず値が存在する必要があります。AUTO_INCREMENT:新しい行が挿入されるたびに、この列の値が自動的に増加する自動インクリメントの識別子です。UNIQUE:列内のすべての値が一意であることを保証します。
具体的には、SERIAL データ型はデフォルトで BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE 型の列を作成することに相当します。SERIAL データ型を使用すると、一意の識別子を持つ列を簡単に作成でき、特にテーブルの主キーとして使用するのに適しています。
例:
以下のSQLステートメントを使用してテーブル
tbl1を作成し、2つのフィールドを定義します:idフィールドをSERIALデータ型に、nameフィールドをVARCHAR(10)データ型に定義します。obclient [test]> CREATE TABLE tbl1 (id SERIAL, name VARCHAR(10));以下のSQLステートメントを使用して、テーブル
tbl1の定義を確認します。obclient [test]> SHOW CREATE TABLE tbl1;実行結果は次のとおりです:
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | tbl1 | CREATE TABLE `tbl1` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(10) DEFAULT NULL, UNIQUE KEY `id` (`id`) BLOCK_SIZE 16384 LOCAL ) AUTO_INCREMENT = 1 AUTO_INCREMENT_MODE = 'ORDER' DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 3 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 | +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set