All Products
Search
Document Center

AnalyticDB:Tipe data dasar

Last Updated:Aug 21, 2026

AnalyticDB for MySQL mendukung rangkaian inti tipe data SQL yang mencakup kategori numerik, string, waktu, dan spasial. Halaman ini menjelaskan ukuran penyimpanan, rentang nilai, serta perbedaan masing-masing tipe dibandingkan dengan MySQL standar, diikuti oleh aturan konversi tipe implisit.

Tipe data yang didukung

Tipe numerik

Type Aliases Value range Size Notes
BOOLEAN 0 (false), 1 (true) 1 bit Tidak ada perbedaan dari MySQL.
TINYINT -128 hingga 127 1 byte Tidak ada perbedaan dari MySQL.
SMALLINT -32768 hingga 32767 2 bytes Tidak ada perbedaan dari MySQL.
INT atau INTEGER -2147483648 hingga 2147483647 4 bytes Sesuai dengan INT atau MEDIUMINT MySQL.
BIGINT -9223372036854775808 hingga 9223372036854775807 8 bytes Tidak ada perbedaan dari MySQL.
FLOAT -3.402823466E+38 hingga -1.175494351E-38, 0, 1.175494351E-38 hingga 3.402823466E+38 4 bytes Mengikuti standar IEEE. Tidak ada perbedaan dari MySQL.
DOUBLE -1.7976931348623157E+308 hingga -2.2250738585072014E-308, 0, 2.2250738585072014E-308 hingga 1.7976931348623157E+308 8 bytes Mengikuti standar IEEE. Tidak ada perbedaan dari MySQL.
DECIMAL(m,d) atau NUMERIC m: presisi maksimum 138; d: skala desimal, harus ≤ m

MySQL mendukung presisi maksimum 65; AnalyticDB for MySQL mendukung hingga 38. Jika presisi DECIMAL melebihi 38, pernyataan CREATE TABLE gagal dan mengembalikan kode kesalahan 5030 dengan pesan decimal precision must be less than or equal to 38. Pada versi sebelumnya, presisi maksimum default adalah 1000. Nilai tersebut dikurangi menjadi 38 pada versi saat ini. Jika workload Anda memerlukan presisi lebih besar dari 38, gunakan salah satu metode berikut:

  • Kurangi presisi: atur presisi DECIMAL menjadi 38 atau kurang.

  • Tingkatkan batas di backend: hubungi Alibaba Cloud Technical Support untuk mengatur parameter DECIMAL_MAX_PRECISION menjadi 1000, lalu restart kluster agar perubahan berlaku. Ini adalah parameter backend yang tidak dapat dimodifikasi melalui pengaturan kluster di Konsol atau dengan memanggil Operasi API.

Tipe string

Type Description MySQL equivalent
VARCHAR Hingga 16 MB. Spesifikasi panjang seperti VARCHAR(255) diterima demi kompatibilitas sintaksis — batas maksimum aktual ditentukan oleh ukuran data (hingga 16 MB), bukan angka yang dideklarasikan. Jangan mengandalkan panjang yang dideklarasikan untuk validasi. CHAR, VARCHAR, TEXT, MEDIUMTEXT, atau LONGTEXT
BINARY Panjang karakter penyimpanan. BINARY, VARBINARY, atau BLOB

Tipe waktu

Type Value range Format Size Notes
DATE '0001-01-01' hingga '9999-12-31' YYYY-MM-DD 4 bytes MySQL mendukung 0000-00-00; AnalyticDB for MySQL memvalidasi nilai waktu dan mengonversi 0000-00-00 menjadi NULL. Gunakan tanggal aktual.
TIME '00:00:00' hingga '23:59:59' HH:MM:SS 8 bytes MySQL mendukung presisi kustom; AnalyticDB for MySQL mendukung presisi tingkat milidetik (hingga tiga tempat desimal).
DATETIME '0001-01-01 00:00:00.000' hingga '9999-12-31 23:59:59.999' YYYY-MM-DD HH:MM:SS 8 bytes Disimpan dalam UTC. Zona waktu tidak dapat diubah. MySQL mendukung 0000-00-00 dan presisi kustom; AnalyticDB for MySQL mengonversi 0000-00-00 menjadi NULL.
TIMESTAMP '0100-01-01 00:00:00.000' hingga '9999-12-31 23:59:59.999' YYYY-MM-DD HH:MM:SS 8 bytes Secara default menggunakan zona waktu sistem; Anda dapat menentukan zona waktu berbeda per session. MySQL mendukung presisi kustom; AnalyticDB for MySQL mendukung presisi tingkat milidetik (hingga tiga tempat desimal).
Penting

DATETIME selalu menggunakan UTC. Berbeda dengan TIMESTAMP, zona waktu untuk nilai DATETIME tidak dapat diubah per sesi.

Tipe spasial

Type Description Notes
POINT Koordinat geografis x dan y. Tidak ada perbedaan dari MySQL.

Konversi tipe implisit

AnalyticDB for MySQL melakukan konversi tipe implisit secara otomatis berdasarkan konteks saat Anda menjalankan kueri SQL. Aturan konversi berbeda antara proyeksi SELECT dan filter WHERE.

Catatan

Konversi tipe implisit hanya berlaku untuk tipe data dasar. Tipe data kompleks tidak mendukung konversi tipe implisit. Untuk kasus di mana aturan default tidak memenuhi kebutuhan Anda, gunakan konversi tipe eksplisit.

Aturan konversi proyeksi

Saat kolom dalam pernyataan SELECT dibandingkan dengan konstanta, hasilnya secara implisit dikonversi ke tipe yang ditunjukkan dalam tabel berikut. Jika konversi tidak didukung, terjadi kesalahan.

Column \ Constant 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 Not supported DOUBLE Not supported Not supported Not supported Not supported
TINYINT BIGINT TINYINT TINYINT SMALLINT INTEGER BIGINT DECIMAL DOUBLE Not supported Not supported Not supported Not supported
SMALLINT BIGINT SMALLINT SMALLINT SMALLINT INTEGER BIGINT DECIMAL DOUBLE Not supported Not supported Not supported Not supported
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 Not supported DECIMAL DECIMAL DECIMAL DECIMAL DECIMAL DOUBLE Not supported Not supported Not supported Not supported
DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE
TIME TIME Not supported Not supported Not supported BIGINT BIGINT Not supported DOUBLE TIME BIGINT BIGINT DATETIME
DATE DATE Not supported Not supported Not supported BIGINT BIGINT Not supported DOUBLE BIGINT TIMESTAMP TIMESTAMP DATETIME
TIMESTAMP TIMESTAMP Not supported Not supported Not supported BIGINT BIGINT Not supported DOUBLE BIGINT TIMESTAMP TIMESTAMP DATETIME
DATETIME DATETIME Not supported Not supported Not supported BIGINT BIGINT Not supported DOUBLE DATETIME DATETIME DATETIME DATETIME

Aturan konversi filter

Saat kolom dalam klausa WHERE dibandingkan dengan konstanta bertipe berbeda, tipe hasilnya dikonversi secara implisit. Ketidaksesuaian tipe dapat mencegah pushdown—optimasi yang mendorong kondisi filter ke lapisan penyimpanan untuk pemfilteran berbasis indeks. Jika pushdown gagal, database kembali ke pemindaian tabel penuh, yang secara signifikan menurunkan performa kueri.

Tabel berikut menunjukkan tipe hasil dan status pushdown untuk setiap pasangan tipe kolom–konstanta. ✓ = pushdown berhasil; ✗ = pushdown gagal (pemindaian tabel penuh).

Column \ Constant 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 ✗ Not supported REAL ✗ DOUBLE ✗ Not supported Not supported Not supported Not supported
TINYINT TINYINT ✓ TINYINT ✓ TINYINT ✓ TINYINT ✓ TINYINT ✓ TINYINT ✓ DECIMAL ✗ REAL ✗ DOUBLE ✗ Not supported Not supported Not supported Not supported
SMALLINT SMALLINT ✓ SMALLINT ✓ SMALLINT ✓ SMALLINT ✓ SMALLINT ✓ SMALLINT ✓ DECIMAL ✗ REAL ✗ DOUBLE ✗ Not supported Not supported Not supported Not supported
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 ✗ Not supported Not supported Not supported Not supported
REAL REAL ✓ REAL ✓ REAL ✓ REAL ✓ REAL ✓ REAL ✓ REAL ✓ REAL ✓ DOUBLE ✗ Not supported Not supported Not supported Not supported
DOUBLE DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓
TIME TIME ✓ Not supported Not supported Not supported BIGINT ✗ BIGINT ✗ Not supported Not supported DOUBLE ✗ TIME ✓ BIGINT ✗ BIGINT ✗ DATETIME ✗
DATE DATE ✓ Not supported Not supported Not supported BIGINT ✗ BIGINT ✗ Not supported Not supported DOUBLE ✗ BIGINT ✗ DATE ✓ TIMESTAMP ✗ DATETIME ✗
TIMESTAMP TIMESTAMP ✓ Not supported Not supported Not supported BIGINT ✗ BIGINT ✗ Not supported Not supported DOUBLE ✗ TIMESTAMP ✓ TIMESTAMP ✓ TIMESTAMP ✓ TIMESTAMP ✓
DATETIME DATETIME ✓ Not supported Not supported Not supported BIGINT ✗ BIGINT ✗ Not supported Not supported DOUBLE ✗ DATETIME ✓ DATETIME ✓ DATETIME ✓ DATETIME ✓

Optimasi konversi tipe paksa (ENFORCE_UNWRAP_CAST)

ENFORCE_UNWRAP_CAST mengontrol cara AnalyticDB for MySQL menangani konversi tipe implisit dalam kondisi filter. Saat diaktifkan, sistem mengonversi konstanta agar sesuai dengan tipe kolom, bukan sebaliknya—sehingga mempertahankan optimasi pushdown dan mencegah hasil tak terduga akibat pemotongan nilai.

Konfigurasi ENFORCE_UNWRAP_CAST

Tersedia dua metode konfigurasi:

  • Global — berlaku untuk semua kueri dalam kluster:

    SET ADB_CONFIG ENFORCE_UNWRAP_CAST = true;
  • Petunjuk kueri — berlaku untuk satu kueri tanpa memengaruhi kueri lain:

    /*+ ENFORCE_UNWRAP_CAST=true */

Contoh

Kolom col dalam tabel test bertipe VARCHAR dan berisi nilai '1', '1a', dan 'abc'. Menjalankan kueri berikut menghasilkan keluaran berbeda tergantung pada apakah ENFORCE_UNWRAP_CAST diaktifkan:

SELECT col FROM test WHERE col = 1;
Setting Behavior Matching rows Pushdown
ENFORCE_UNWRAP_CAST=false (default) Mengonversi kolom VARCHAR ke BIGINT. '1' dan '1a' keduanya dipotong menjadi 1 dan cocok. '1', '1a' Gagal — pemindaian tabel penuh
ENFORCE_UNWRAP_CAST=true Mengonversi konstanta INTEGER 1 ke VARCHAR '1'. Hanya kecocokan string eksak yang memenuhi syarat. '1' saja Berhasil — pushdown lapisan penyimpanan

Aktifkan ENFORCE_UNWRAP_CAST saat kolom dideklarasikan sebagai tipe string tetapi dikueri dengan konstanta numerik, untuk mendapatkan hasil akurat dan menghindari pemindaian tabel penuh.