すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:基本的なデータ型

最終更新日:Aug 22, 2026

AnalyticDB for MySQL は、数値、文字列、時間、空間のカテゴリにわたる SQL データ型のコアセットをサポートしています。このページでは、各型のストレージサイズ、値の範囲、標準の MySQL との違いについて説明し、続いて暗黙の型変換ルールについて説明します。

サポートされているデータ型

数値型

型 エイリアス 値の範囲 サイズ 注意事項
BOOLEAN — 0 (false)、1 (true) 1 ビット MySQL との違いはありません。
TINYINT — -128 から 127 1 バイト MySQL との違いはありません。
SMALLINT — -32768 から 32767 2 バイト MySQL との違いはありません。
INT または INTEGER — -2147483648 から 2147483647 4 バイト MySQL の INT または MEDIUMINT に対応します。
BIGINT — -9223372036854775808 から 9223372036854775807 8 バイト MySQL との違いはありません。
FLOAT — -3.402823466E+38 から -1.175494351E-38、0、1.175494351E-38 から 3.402823466E+38 4 バイト IEEE 標準に準拠しています。MySQL との違いはありません。
DOUBLE — -1.7976931348623157E+308 から -2.2250738585072014E-308、0、2.2250738585072014E-308 から 1.7976931348623157E+308 8 バイト IEEE 標準に準拠しています。MySQL との違いはありません。
DECIMAL(m,d) または NUMERIC — m:最大精度 1~38、d:小数点以下の桁数、m —

MySQL は最大精度 65 をサポートしますが、AnalyticDB for MySQL は最大 38 までサポートします。DECIMAL の精度が 38 を超えると、CREATE TABLE 文は失敗し、エラーコード 5030 とメッセージ decimal precision must be less than or equal to 38 が返されます。以前のバージョンでは、デフォルトの最大精度は 1000 でした。現在のバージョンでは 38 に引き下げられています。ご利用のワークロードで 38 を超える精度が必要な場合は、次のいずれかの方法を使用してください:

  • 精度を下げる:DECIMAL の精度を 38 以下に設定します。

  • バックエンドの上限を引き上げる:Alibaba Cloud テクニカルサポートに連絡して、DECIMAL_MAX_PRECISION パラメーターを 1000 に設定し、クラスターを再起動して変更を有効にします。これはバックエンドパラメーターであり、コンソールのクラスター設定や API オペレーションの呼び出しでは変更できません。

文字列型

型 説明 MySQL での相当する型
VARCHAR 最大 16 MB。VARCHAR(255) のような長さ指定子は構文の互換性のために受け入れられますが、実際の最大長は宣言された数値ではなくデータサイズ (最大 16 MB) によって決まります。宣言された長さを検証に利用しないでください。 CHAR、VARCHAR、TEXT、MEDIUMTEXT、または LONGTEXT
BINARY ストレージ文字の長さ。 BINARY、VARBINARY、または BLOB

時間型

型 値の範囲 フォーマット サイズ 注意事項
DATE '0001-01-01' から '9999-12-31' YYYY-MM-DD 4 バイト MySQL は 0000-00-00 をサポートしますが、AnalyticDB for MySQL は時間値を検証し、0000-00-00 を NULL に変換します。実際の日付を使用してください。
TIME '00:00:00' から '23:59:59' HH:MM:SS 8 バイト MySQL はカスタム精度をサポートしますが、AnalyticDB for MySQL はミリ秒レベルの精度 (小数点以下 3 桁まで) をサポートしています。
DATETIME '0001-01-01 00:00:00.000' から '9999-12-31 23:59:59.999' YYYY-MM-DD HH:MM:SS 8 バイト 協定世界時 (UTC) で格納されます。タイムゾーンは変更できません。MySQL は 0000-00-00 とカスタム精度をサポートしますが、AnalyticDB for MySQL は 0000-00-00 を NULL に変換します。
TIMESTAMP '0100-01-01 00:00:00.000' から '9999-12-31 23:59:59.999' YYYY-MM-DD HH:MM:SS 8 バイト デフォルトでシステムタイムゾーンを使用します。セッションごとに異なるタイムゾーンを指定できます。MySQL はカスタム精度をサポートしますが、AnalyticDB for MySQL はミリ秒レベルの精度 (小数点以下 3 桁まで) をサポートしています。
重要

DATETIME は常に協定世界時 (UTC) を使用します。TIMESTAMP とは異なり、DATETIME 値のタイムゾーンはセッションごとに上書きできません。

空間データ型

型 説明 注意事項
POINT 地理座標 x と y。 MySQL との違いはありません。

暗黙の型変換

AnalyticDB for MySQL は、SQL クエリを実行する際に、コンテキストに基づいて暗黙の型変換を自動的に実行します。変換ルールは、SELECT プロジェクションと WHERE フィルターで異なります。

説明

暗黙の型変換は、基本的なデータ型にのみ適用されます。複合データ型は暗黙の型変換をサポートしていません。デフォルトのルールがニーズを満たさない場合は、明示的な型変換を使用してください。

プロジェクションの変換ルール

SELECT 文の列が定数と比較される場合、結果は、次の表に示す型に暗黙的に変換されます。変換がサポートされていない場合、エラーが発生します。

列 \ 定数 VARCHAR BOOLEAN TINYINT SMALLINT INTEGER BIGINT DECIMAL DOUBLE TIME DATE TIMESTAMP DATETIME
VARCHAR VARCHAR BOOLEAN BIGINT BIGINT BIGINT BIGINT DECIMAL DOUBLE TIME DATE TIMESTAMP DATETIME
BOOLEAN BOOLEAN BOOLEAN TINYINT SMALLINT INTEGER BIGINT サポートされていません DOUBLE サポートされていません サポートされていません サポートされていません サポートされていません
TINYINT BIGINT TINYINT TINYINT SMALLINT INTEGER BIGINT DECIMAL DOUBLE サポートされていません サポートされていません サポートされていません サポートされていません
SMALLINT BIGINT SMALLINT SMALLINT SMALLINT INTEGER BIGINT DECIMAL DOUBLE サポートされていません サポートされていません サポートされていません サポートされていません
INTEGER BIGINT INTEGER INTEGER INTEGER INTEGER BIGINT DECIMAL DOUBLE BIGINT BIGINT BIGINT BIGINT
BIGINT BIGINT BIGINT BIGINT BIGINT BIGINT BIGINT DECIMAL DOUBLE BIGINT BIGINT BIGINT BIGINT
DECIMAL DECIMAL サポートされていません DECIMAL DECIMAL DECIMAL DECIMAL DECIMAL DOUBLE サポートされていません サポートされていません サポートされていません サポートされていません
DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE
TIME TIME サポートされていません サポートされていません サポートされていません BIGINT BIGINT サポートされていません DOUBLE TIME BIGINT BIGINT DATETIME
DATE DATE サポートされていません サポートされていません サポートされていません BIGINT BIGINT サポートされていません DOUBLE BIGINT TIMESTAMP TIMESTAMP DATETIME
TIMESTAMP TIMESTAMP サポートされていません サポートされていません サポートされていません BIGINT BIGINT サポートされていません DOUBLE BIGINT TIMESTAMP TIMESTAMP DATETIME
DATETIME DATETIME サポートされていません サポートされていません サポートされていません BIGINT BIGINT サポートされていません DOUBLE DATETIME DATETIME DATETIME DATETIME

フィルターの変換ルール

WHERE 句の列が異なる型の定数と比較される場合、結果の型は暗黙的に変換されます。型の不一致は、インデックスベースのフィルタリングのためにフィルター条件をストレージレイヤーにプッシュする最適化であるプッシュダウンを妨げる可能性があります。プッシュダウンが失敗すると、データベースは全表スキャンにフォールバックし、これにより、クエリのパフォーマンスが大幅に低下します。

以下の表は、各列と定数の型のペアに対する結果の型とプッシュダウンのステータスを示しています。✓ = プッシュダウン成功、✗ = プッシュダウン失敗 (全表スキャン)。

列 \ 定数 VARCHAR BOOLEAN TINYINT SMALLINT INTEGER BIGINT DECIMAL REAL DOUBLE TIME DATE TIMESTAMP DATETIME
VARCHAR VARCHAR ✓ BOOLEAN ✗ BIGINT ✗ BIGINT ✗ BIGINT ✗ BIGINT ✗ DECIMAL ✗ REAL ✗ DOUBLE ✗ TIME ✗ DATE ✗ TIMESTAMP ✗ DATETIME ✗
BOOLEAN BOOLEAN ✓ BOOLEAN ✓ TINYINT ✗ SMALLINT ✗ INTEGER ✗ BIGINT ✗ サポートされていません REAL ✗ DOUBLE ✗ サポートされていません サポートされていません サポートされていません サポートされていません
TINYINT TINYINT ✓ TINYINT ✓ TINYINT ✓ TINYINT ✓ TINYINT ✓ TINYINT ✓ DECIMAL ✗ REAL ✗ DOUBLE ✗ サポートされていません サポートされていません サポートされていません サポートされていません
SMALLINT SMALLINT ✓ SMALLINT ✓ SMALLINT ✓ SMALLINT ✓ SMALLINT ✓ SMALLINT ✓ DECIMAL ✗ REAL ✗ DOUBLE ✗ サポートされていません サポートされていません サポートされていません サポートされていません
INTEGER INTEGER ✓ INTEGER ✓ INTEGER ✓ INTEGER ✓ INTEGER ✓ INTEGER ✓ DECIMAL ✗ REAL ✗ DOUBLE ✗ INTEGER ✓ INTEGER ✓ INTEGER INTEGER
BIGINT BIGINT ✓ BIGINT ✓ BIGINT ✓ BIGINT ✓ BIGINT ✓ BIGINT ✓ DECIMAL ✗ REAL ✗ DOUBLE ✗ BIGINT ✓ BIGINT ✓ BIGINT BIGINT
DECIMAL DECIMAL ✓ DECIMAL ✓ DECIMAL ✓ DECIMAL ✓ DECIMAL ✓ DECIMAL ✓ DECIMAL ✓ REAL ✗ DOUBLE ✗ サポートされていません サポートされていません サポートされていません サポートされていません
REAL REAL ✓ REAL ✓ REAL ✓ REAL ✓ REAL ✓ REAL ✓ REAL ✓ REAL ✓ DOUBLE ✗ サポートされていません サポートされていません サポートされていません サポートされていません
DOUBLE DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓
TIME TIME ✓ サポートされていません サポートされていません サポートされていません BIGINT ✗ BIGINT ✗ サポートされていません サポートされていません DOUBLE ✗ TIME ✓ BIGINT ✗ BIGINT ✗ DATETIME ✗
DATE DATE ✓ サポートされていません サポートされていません サポートされていません BIGINT ✗ BIGINT ✗ サポートされていません サポートされていません DOUBLE ✗ BIGINT ✗ DATE ✓ TIMESTAMP ✗ DATETIME ✗
TIMESTAMP TIMESTAMP ✓ サポートされていません サポートされていません サポートされていません BIGINT ✗ BIGINT ✗ サポートされていません サポートされていません DOUBLE ✗ TIMESTAMP ✓ TIMESTAMP ✓ TIMESTAMP ✓ TIMESTAMP ✓
DATETIME DATETIME ✓ サポートされていません サポートされていません サポートされていません BIGINT ✗ BIGINT ✗ サポートされていません サポートされていません DOUBLE ✗ DATETIME ✓ DATETIME ✓ DATETIME ✓ DATETIME ✓

強制的な型変換の最適化 (ENFORCE_UNWRAP_CAST)

ENFORCE_UNWRAP_CAST は、フィルター条件における暗黙の型変換を AnalyticDB for MySQL がどのように処理するかを制御します。有効にすると、システムは列の型に合わせて定数を変換します (その逆ではありません)。これにより、プッシュダウンの最適化が維持され、値の切り捨てによる予期しない結果を防ぐことができます。

ENFORCE_UNWRAP_CAST の設定

2 つの設定方法が利用可能です:

  • グローバル — クラスター内のすべてのクエリに適用されます:

    SET ADB_CONFIG ENFORCE_UNWRAP_CAST = true;
  • クエリヒント — 他のクエリに影響を与えることなく、単一のクエリに適用されます:

    /*+ ENFORCE_UNWRAP_CAST=true */

例

test テーブルの col 列は VARCHAR 型で、値 '1'、'1a'、'abc' を含みます。次のクエリを実行すると、ENFORCE_UNWRAP_CAST が有効になっているかどうかによって、異なる結果が生成されます:

SELECT col FROM test WHERE col = 1;
設定 動作 一致する行 プッシュダウン
ENFORCE_UNWRAP_CAST=false (デフォルト) VARCHAR 型の列を BIGINT 型に変換します。'1' と '1a' は両方とも 1 に切り捨てられて一致します。 '1'、'1a' 失敗 — 全表スキャン
ENFORCE_UNWRAP_CAST=true INTEGER 型の定数 1 を VARCHAR 型の '1' に変換します。完全な文字列一致のみが対象となります。 '1' のみ 成功 — ストレージレイヤーへのプッシュダウン

列が文字列型として宣言されているが、数値定数でクエリされる場合は、ENFORCE_UNWRAP_CAST を有効にすると、正確な結果を取得し、全表スキャンを回避できます。