Tous les produits
Search
Centre de documentation

AnalyticDB:Types de données de base

Dernière mise à jour :Aug 20, 2026

AnalyticDB for MySQL prend en charge un ensemble de types de données SQL fondamentaux, répartis entre les catégories numériques, les chaînes, les dates et heures, ainsi que les données spatiales. Cette rubrique décrit la taille de stockage, la plage de valeurs et les différences par rapport à MySQL standard pour chaque type, suivies des règles de conversion implicite de type.

Types de données pris en charge

Types numériques

Type Alias Plage de valeurs Taille Notes
BOOLEAN 0 (false), 1 (true) 1 bit Aucune différence par rapport à MySQL.
TINYINT -128 à 127 1 octet Aucune différence par rapport à MySQL.
SMALLINT -32768 à 32767 2 octets Aucune différence par rapport à MySQL.
INT ou INTEGER -2147483648 à 2147483647 4 octets Correspond aux types MySQL INT ou MEDIUMINT.
BIGINT -9223372036854775808 à 9223372036854775807 8 octets Aucune différence par rapport à MySQL.
FLOAT -3.402823466E+38 à -1.175494351E-38, 0, 1.175494351E-38 à 3.402823466E+38 4 octets Conforme à la norme IEEE. Aucune différence par rapport à MySQL.
DOUBLE -1.7976931348623157E+308 à -2.2250738585072014E-308, 0, 2.2250738585072014E-308 à 1.7976931348623157E+308 8 octets Conforme à la norme IEEE. Aucune différence par rapport à MySQL.
DECIMAL(m,d) ou NUMERIC m : précision maximale 138 ; d : échelle décimale, doit être ≤ m

MySQL prend en charge une précision maximale de 65 ; AnalyticDB for MySQL prend en charge jusqu'à 38. Si la précision DECIMAL dépasse 38, l'instruction CREATE TABLE échoue et renvoie le code d'erreur 5030 avec le message decimal precision must be less than or equal to 38. Dans les versions antérieures, la précision maximale par défaut était de 1000. Elle est réduite à 38 dans la version actuelle. Si votre charge de travail nécessite une précision supérieure à 38, utilisez l'une des méthodes suivantes :

  • Réduisez la précision : définissez la précision DECIMAL sur 38 ou moins.

  • Augmentez la limite côté backend : contactez le support technique d'Alibaba Cloud pour définir le paramètre DECIMAL_MAX_PRECISION sur 1000, puis redémarrez le cluster pour que la modification prenne effet. Il s'agit d'un paramètre backend qui ne peut pas être modifié via les paramètres du cluster dans la console ni en appelant une opération API.

Types de chaînes

Type Description Équivalent MySQL
VARCHAR Jusqu'à 16 Mo. Un spécificateur de longueur tel que VARCHAR(255) est accepté pour la compatibilité syntaxique — le maximum réel est déterminé par la taille des données (jusqu'à 16 Mo), et non par le nombre déclaré. Ne vous fiez pas à la longueur déclarée pour la validation. CHAR, VARCHAR, TEXT, MEDIUMTEXT ou LONGTEXT
BINARY Longueur des caractères stockés. BINARY, VARBINARY ou BLOB

Types temporels

Type Plage de valeurs Format Taille Notes
DATE '0001-01-01' à '9999-12-31' YYYY-MM-DD 4 octets MySQL prend en charge 0000-00-00 ; AnalyticDB for MySQL valide les valeurs temporelles et convertit 0000-00-00 en NULL. Utilisez des dates réelles.
TIME '00:00:00' à '23:59:59' HH:MM:SS 8 octets MySQL prend en charge une précision personnalisée ; AnalyticDB for MySQL prend en charge une précision au niveau de la milliseconde (jusqu'à trois décimales).
DATETIME '0001-01-01 00:00:00.000' à '9999-12-31 23:59:59.999' YYYY-MM-DD HH:MM:SS 8 octets Stocké en UTC. Le fuseau horaire ne peut pas être modifié. MySQL prend en charge 0000-00-00 et une précision personnalisée ; AnalyticDB for MySQL convertit 0000-00-00 en NULL.
TIMESTAMP '0100-01-01 00:00:00.000' à '9999-12-31 23:59:59.999' YYYY-MM-DD HH:MM:SS 8 octets Utilise le fuseau horaire du système par défaut ; vous pouvez spécifier un fuseau horaire différent par session. MySQL prend en charge une précision personnalisée ; AnalyticDB for MySQL prend en charge une précision au niveau de la milliseconde (jusqu'à trois décimales).
Important

DATETIME utilise toujours UTC. Contrairement à TIMESTAMP, le fuseau horaire des valeurs DATETIME ne peut pas être remplacé au niveau de la session.

Types spatiaux

Type Description Notes
POINT Coordonnées géographiques x et y. Aucune différence par rapport à MySQL.

Conversion implicite de type

AnalyticDB for MySQL effectue automatiquement une conversion implicite de type en fonction du contexte lorsque vous exécutez des requêtes SQL. Les règles de conversion diffèrent entre les projections SELECT et les filtres WHERE.

Remarque

La conversion implicite de type s'applique uniquement aux types de données de base. Les types de données complexes ne prennent pas en charge la conversion implicite de type. Pour les cas où les règles par défaut ne répondent pas à vos besoins, utilisez la conversion explicite de type.

Règles de conversion pour les projections

Lorsqu'une colonne dans une instruction SELECT est comparée à une constante, le résultat est implicitement converti vers le type indiqué dans le tableau suivant. Si la conversion n'est pas prise en charge, une erreur se produit.

Colonne \ Constante 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 Non pris en charge DOUBLE Non pris en charge Non pris en charge Non pris en charge Non pris en charge
TINYINT BIGINT TINYINT TINYINT SMALLINT INTEGER BIGINT DECIMAL DOUBLE Non pris en charge Non pris en charge Non pris en charge Non pris en charge
SMALLINT BIGINT SMALLINT SMALLINT SMALLINT INTEGER BIGINT DECIMAL DOUBLE Non pris en charge Non pris en charge Non pris en charge Non pris en charge
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 Non pris en charge DECIMAL DECIMAL DECIMAL DECIMAL DECIMAL DOUBLE Non pris en charge Non pris en charge Non pris en charge Non pris en charge
DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE
TIME TIME Non pris en charge Non pris en charge Non pris en charge BIGINT BIGINT Non pris en charge DOUBLE TIME BIGINT BIGINT DATETIME
DATE DATE Non pris en charge Non pris en charge Non pris en charge BIGINT BIGINT Non pris en charge DOUBLE BIGINT TIMESTAMP TIMESTAMP DATETIME
TIMESTAMP TIMESTAMP Non pris en charge Non pris en charge Non pris en charge BIGINT BIGINT Non pris en charge DOUBLE BIGINT TIMESTAMP TIMESTAMP DATETIME
DATETIME DATETIME Non pris en charge Non pris en charge Non pris en charge BIGINT BIGINT Non pris en charge DOUBLE DATETIME DATETIME DATETIME DATETIME

Règles de conversion pour les filtres

Lorsqu'une colonne dans une clause WHERE est comparée à une constante d'un type différent, le type de résultat est implicitement converti. Des types incompatibles peuvent empêcher le pushdown — l'optimisation qui pousse les conditions de filtre vers la couche de stockage pour un filtrage basé sur les index. Lorsque le pushdown échoue, la base de données revient à une analyse complète de la table, ce qui réduit considérablement les performances des requêtes.

Le tableau ci-dessous indique le type de résultat et l'état du pushdown pour chaque paire colonne-constante. ✓ = le pushdown réussit ; ✗ = le pushdown échoue (analyse complète de la table).

Colonne \ Constante 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 ✗ Non pris en charge REAL ✗ DOUBLE ✗ Non pris en charge Non pris en charge Non pris en charge Non pris en charge
TINYINT TINYINT ✓ TINYINT ✓ TINYINT ✓ TINYINT ✓ TINYINT ✓ TINYINT ✓ DECIMAL ✗ REAL ✗ DOUBLE ✗ Non pris en charge Non pris en charge Non pris en charge Non pris en charge
SMALLINT SMALLINT ✓ SMALLINT ✓ SMALLINT ✓ SMALLINT ✓ SMALLINT ✓ SMALLINT ✓ DECIMAL ✗ REAL ✗ DOUBLE ✗ Non pris en charge Non pris en charge Non pris en charge Non pris en charge
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 ✗ Non pris en charge Non pris en charge Non pris en charge Non pris en charge
REAL REAL ✓ REAL ✓ REAL ✓ REAL ✓ REAL ✓ REAL ✓ REAL ✓ REAL ✓ DOUBLE ✗ Non pris en charge Non pris en charge Non pris en charge Non pris en charge
DOUBLE DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓ DOUBLE ✓
TIME TIME ✓ Non pris en charge Non pris en charge Non pris en charge BIGINT ✗ BIGINT ✗ Non pris en charge Non pris en charge DOUBLE ✗ TIME ✓ BIGINT ✗ BIGINT ✗ DATETIME ✗
DATE DATE ✓ Non pris en charge Non pris en charge Non pris en charge BIGINT ✗ BIGINT ✗ Non pris en charge Non pris en charge DOUBLE ✗ BIGINT ✗ DATE ✓ TIMESTAMP ✗ DATETIME ✗
TIMESTAMP TIMESTAMP ✓ Non pris en charge Non pris en charge Non pris en charge BIGINT ✗ BIGINT ✗ Non pris en charge Non pris en charge DOUBLE ✗ TIMESTAMP ✓ TIMESTAMP ✓ TIMESTAMP ✓ TIMESTAMP ✓
DATETIME DATETIME ✓ Non pris en charge Non pris en charge Non pris en charge BIGINT ✗ BIGINT ✗ Non pris en charge Non pris en charge DOUBLE ✗ DATETIME ✓ DATETIME ✓ DATETIME ✓ DATETIME ✓

Optimisation de la conversion forcée de type (ENFORCE_UNWRAP_CAST)

ENFORCE_UNWRAP_CAST contrôle la manière dont AnalyticDB for MySQL gère la conversion implicite de type dans les conditions de filtre. Lorsqu'il est activé, le système convertit la constante pour qu'elle corresponde au type de la colonne plutôt que l'inverse, préservant ainsi l'optimisation du pushdown et évitant les résultats inattendus dus à la troncature des valeurs.

Configuration de ENFORCE_UNWRAP_CAST

Deux méthodes de configuration sont disponibles :

  • Globale — s'applique à toutes les requêtes du cluster :

    SET ADB_CONFIG ENFORCE_UNWRAP_CAST = true;
  • Indice de requête — s'applique à une seule requête sans affecter les autres :

    /*+ ENFORCE_UNWRAP_CAST=true */

Exemple

La colonne col de la table test est de type VARCHAR et contient les valeurs '1', '1a' et 'abc'. L'exécution de la requête suivante produit des résultats différents selon que ENFORCE_UNWRAP_CAST est activé ou non :

SELECT col FROM test WHERE col = 1;
Paramètre Comportement Lignes correspondantes Pushdown
ENFORCE_UNWRAP_CAST=false (par défaut) Convertit la colonne VARCHAR en BIGINT. '1' et '1a' sont tous deux tronqués en 1 et correspondent. '1', '1a' Échec — analyse complète de la table
ENFORCE_UNWRAP_CAST=true Convertit la constante INTEGER 1 en VARCHAR '1'. Seule une correspondance exacte de chaîne est qualifiée. '1' uniquement Succès — pushdown au niveau du stockage

Activez ENFORCE_UNWRAP_CAST lorsque les colonnes sont déclarées comme des types de chaîne mais interrogées avec des constantes numériques, afin d'obtenir des résultats précis et d'éviter les analyses complètes de table.