O AnalyticDB for MySQL oferece suporte a um conjunto principal de tipos de dados SQL nas categorias numérica, string, tempo e espacial. Esta página descreve o tamanho de armazenamento, o intervalo de valores e as diferenças em relação ao MySQL padrão para cada tipo, além das regras de conversão implícita de tipos.
Tipos de dados suportados
Tipos numéricos
| Tipo | Alias | Intervalo de valores | Tamanho | Observações |
|---|---|---|---|---|
BOOLEAN |
— | 0 (falso), 1 (verdadeiro) |
1 bit | Sem diferença em relação ao MySQL. |
TINYINT |
— | -128 a 127 |
1 byte | Sem diferença em relação ao MySQL. |
SMALLINT |
— | -32768 a 32767 |
2 bytes | Sem diferença em relação ao MySQL. |
INT ou INTEGER |
— | -2147483648 a 2147483647 |
4 bytes | Corresponde a INT ou MEDIUMINT do MySQL. |
BIGINT |
— | -9223372036854775808 a 9223372036854775807 |
8 bytes | Sem diferença em relação ao MySQL. |
FLOAT |
— | -3.402823466E+38 a -1.175494351E-38, 0, 1.175494351E-38 a 3.402823466E+38 |
4 bytes | Segue o padrão IEEE. Sem diferença em relação ao MySQL. |
DOUBLE |
— | -1.7976931348623157E+308 a -2.2250738585072014E-308, 0, 2.2250738585072014E-308 a 1.7976931348623157E+308 |
8 bytes | Segue o padrão IEEE. Sem diferença em relação ao MySQL. |
DECIMAL(m,d) ou NUMERIC |
— | m: precisão máxima 1–38; d: escala decimal, deve ser ≤ m |
— |
O MySQL suporta precisão máxima de
|
Tipos de string
|
Tipo |
Descrição |
Equivalente no MySQL |
|
|
Até 16 MB. Um especificador de comprimento como |
|
|
|
Comprimento dos caracteres de armazenamento. |
|
Tipos de tempo
|
Tipo |
Intervalo de valores |
Formato |
Tamanho |
Observações |
|
|
|
|
4 bytes |
O MySQL aceita |
|
|
|
|
8 bytes |
O MySQL permite precisão personalizada; o AnalyticDB for MySQL suporta precisão de milissegundos (até três casas decimais). |
|
|
|
|
8 bytes |
Armazenado em UTC. O fuso horário não pode ser alterado. O MySQL aceita |
|
|
|
|
8 bytes |
Usa o fuso horário do sistema por padrão; é possível especificar um fuso horário diferente por sessão. O MySQL permite precisão personalizada; o AnalyticDB for MySQL suporta precisão de milissegundos (até três casas decimais). |
DATETIME sempre utiliza UTC. Diferentemente de TIMESTAMP, o fuso horário dos valores DATETIME não pode ser substituído por sessão.
Tipos espaciais
|
Tipo |
Descrição |
Observações |
|
|
Coordenadas geográficas x e y. |
Sem diferença em relação ao MySQL. |
Conversão implícita de tipos
O AnalyticDB for MySQL converte tipos implicitamente de forma automática com base no contexto durante a execução de consultas SQL. As regras de conversão diferem entre projeções SELECT e filtros WHERE.
A conversão implícita de tipos aplica-se apenas aos tipos de dados básicos. Complex data types não suportam conversão implícita. Quando as regras padrão não atenderem às suas necessidades, utilize explicit type conversion.
Regras de conversão de projeção
Ao comparar uma coluna em uma instrução SELECT com uma constante, o resultado é convertido implicitamente para o tipo indicado na tabela a seguir. Se a conversão não for suportada, ocorrerá um erro.
|
Coluna \ 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 |
Não suportado |
DOUBLE |
Não suportado |
Não suportado |
Não suportado |
Não suportado |
|
TINYINT |
BIGINT |
TINYINT |
TINYINT |
SMALLINT |
INTEGER |
BIGINT |
DECIMAL |
DOUBLE |
Não suportado |
Não suportado |
Não suportado |
Não suportado |
|
SMALLINT |
BIGINT |
SMALLINT |
SMALLINT |
SMALLINT |
INTEGER |
BIGINT |
DECIMAL |
DOUBLE |
Não suportado |
Não suportado |
Não suportado |
Não suportado |
|
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 |
Não suportado |
DECIMAL |
DECIMAL |
DECIMAL |
DECIMAL |
DECIMAL |
DOUBLE |
Não suportado |
Não suportado |
Não suportado |
Não suportado |
|
DOUBLE |
DOUBLE |
DOUBLE |
DOUBLE |
DOUBLE |
DOUBLE |
DOUBLE |
DOUBLE |
DOUBLE |
DOUBLE |
DOUBLE |
DOUBLE |
DOUBLE |
|
TIME |
TIME |
Não suportado |
Não suportado |
Não suportado |
BIGINT |
BIGINT |
Não suportado |
DOUBLE |
TIME |
BIGINT |
BIGINT |
DATETIME |
|
DATE |
DATE |
Não suportado |
Não suportado |
Não suportado |
BIGINT |
BIGINT |
Não suportado |
DOUBLE |
BIGINT |
TIMESTAMP |
TIMESTAMP |
DATETIME |
|
TIMESTAMP |
TIMESTAMP |
Não suportado |
Não suportado |
Não suportado |
BIGINT |
BIGINT |
Não suportado |
DOUBLE |
BIGINT |
TIMESTAMP |
TIMESTAMP |
DATETIME |
|
DATETIME |
DATETIME |
Não suportado |
Não suportado |
Não suportado |
BIGINT |
BIGINT |
Não suportado |
DOUBLE |
DATETIME |
DATETIME |
DATETIME |
DATETIME |
Regras de conversão de filtro
Quando uma coluna em uma cláusula WHERE é comparada com uma constante de tipo diferente, o tipo do resultado é convertido implicitamente. Tipos incompatíveis podem impedir o pushdown — otimização que envia as condições de filtro para a camada de armazenamento visando a filtragem baseada em índice. Se o pushdown falhar, o banco de dados recorre a uma varredura completa da tabela, o que reduz significativamente o desempenho da consulta.
A tabela abaixo mostra o tipo resultante e o status do pushdown para cada par coluna-constante. ✓ = pushdown bem-sucedido; ✗ = falha no pushdown (varredura completa da tabela).
|
Coluna \ 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 ✗ |
Não suportado |
REAL ✗ |
DOUBLE ✗ |
Não suportado |
Não suportado |
Não suportado |
Não suportado |
|
TINYINT |
TINYINT ✓ |
TINYINT ✓ |
TINYINT ✓ |
TINYINT ✓ |
TINYINT ✓ |
TINYINT ✓ |
DECIMAL ✗ |
REAL ✗ |
DOUBLE ✗ |
Não suportado |
Não suportado |
Não suportado |
Não suportado |
|
SMALLINT |
SMALLINT ✓ |
SMALLINT ✓ |
SMALLINT ✓ |
SMALLINT ✓ |
SMALLINT ✓ |
SMALLINT ✓ |
DECIMAL ✗ |
REAL ✗ |
DOUBLE ✗ |
Não suportado |
Não suportado |
Não suportado |
Não suportado |
|
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 ✗ |
Não suportado |
Não suportado |
Não suportado |
Não suportado |
|
REAL |
REAL ✓ |
REAL ✓ |
REAL ✓ |
REAL ✓ |
REAL ✓ |
REAL ✓ |
REAL ✓ |
REAL ✓ |
DOUBLE ✗ |
Não suportado |
Não suportado |
Não suportado |
Não suportado |
|
DOUBLE |
DOUBLE ✓ |
DOUBLE ✓ |
DOUBLE ✓ |
DOUBLE ✓ |
DOUBLE ✓ |
DOUBLE ✓ |
DOUBLE ✓ |
DOUBLE ✓ |
DOUBLE ✓ |
DOUBLE ✓ |
DOUBLE ✓ |
DOUBLE ✓ |
DOUBLE ✓ |
|
TIME |
TIME ✓ |
Não suportado |
Não suportado |
Não suportado |
BIGINT ✗ |
BIGINT ✗ |
Não suportado |
Não suportado |
DOUBLE ✗ |
TIME ✓ |
BIGINT ✗ |
BIGINT ✗ |
DATETIME ✗ |
|
DATE |
DATE ✓ |
Não suportado |
Não suportado |
Não suportado |
BIGINT ✗ |
BIGINT ✗ |
Não suportado |
Não suportado |
DOUBLE ✗ |
BIGINT ✗ |
DATE ✓ |
TIMESTAMP ✗ |
DATETIME ✗ |
|
TIMESTAMP |
TIMESTAMP ✓ |
Não suportado |
Não suportado |
Não suportado |
BIGINT ✗ |
BIGINT ✗ |
Não suportado |
Não suportado |
DOUBLE ✗ |
TIMESTAMP ✓ |
TIMESTAMP ✓ |
TIMESTAMP ✓ |
TIMESTAMP ✓ |
|
DATETIME |
DATETIME ✓ |
Não suportado |
Não suportado |
Não suportado |
BIGINT ✗ |
BIGINT ✗ |
Não suportado |
Não suportado |
DOUBLE ✗ |
DATETIME ✓ |
DATETIME ✓ |
DATETIME ✓ |
DATETIME ✓ |
Otimização de conversão forçada de tipo (ENFORCE_UNWRAP_CAST)
ENFORCE_UNWRAP_CAST controla como o AnalyticDB for MySQL lida com a conversão implícita de tipos nas condições de filtro. Quando ativado, o sistema converte a constante para corresponder ao tipo da coluna, e não o contrário — preservando a otimização de pushdown e evitando resultados inesperados causados pelo truncamento de valores.
Configure ENFORCE_UNWRAP_CAST
Dois métodos de configuração estão disponíveis:
-
Global — aplica-se a todas as consultas no cluster:
SET ADB_CONFIG ENFORCE_UNWRAP_CAST = true; -
Query hint — aplica-se a uma única consulta sem afetar as demais:
/*+ ENFORCE_UNWRAP_CAST=true */
Exemplo
A coluna col na tabela test é do tipo VARCHAR e contém os valores '1', '1a' e 'abc'. A execução da consulta a seguir produz resultados diferentes dependendo se ENFORCE_UNWRAP_CAST está ativado:
SELECT col FROM test WHERE col = 1;
|
Configuração |
Comportamento |
Linhas correspondentes |
Pushdown |
|
|
Converte a coluna VARCHAR para BIGINT. |
|
Falha — varredura completa da tabela |
|
|
Converte a constante INTEGER |
Somente |
Sucesso — pushdown na camada de armazenamento |
Ative ENFORCE_UNWRAP_CAST quando as colunas forem declaradas como tipos de string, mas consultadas com constantes numéricas, para obter resultados precisos e evitar varreduras completas da tabela.