O AnalyticDB for MySQL suporta 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 |
|
|
— |
|
1 bit |
Sem diferença em relação ao MySQL. |
|
|
— |
|
1 byte |
Sem diferença em relação ao MySQL. |
|
|
— |
|
2 bytes |
Sem diferença em relação ao MySQL. |
|
|
— |
|
4 bytes |
Corresponde a |
|
|
— |
|
8 bytes |
Sem diferença em relação ao MySQL. |
|
|
— |
|
4 bytes |
Segue o padrão IEEE. Sem diferença em relação ao MySQL. |
|
|
— |
|
8 bytes |
Segue o padrão IEEE. Sem diferença em relação ao MySQL. |
|
|
— |
|
— |
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 data e hora
|
Tipo |
Intervalo de valores |
Formato |
Tamanho |
Observações |
|
|
|
|
4 bytes |
O MySQL aceita |
|
|
|
|
8 bytes |
O MySQL aceita precisão personalizada. O AnalyticDB for MySQL oferece precisão de milissegundos (até três casas decimais). |
|
|
|
|
8 bytes |
Armazenado em UTC. Não é possível alterar o fuso horário. 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 aceita precisão personalizada. O AnalyticDB for MySQL oferece precisão de milissegundos (até três casas decimais). |
DATETIME sempre usa UTC. Ao contrário de TIMESTAMP, não é possível substituir o fuso horário dos valores DATETIME 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 a tipos de dados básicos. Tipos de dados complexos não suportam conversão implícita de tipos. Caso as regras padrão não atendam às suas necessidades, use conversão explícita de tipos.
Regras de conversão de projeção
Ao comparar uma coluna em uma instrução SELECT com uma constante, o sistema converte o resultado implicitamente para o tipo mostrado 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
Ao comparar uma coluna em uma cláusula WHERE com uma constante de tipo diferente, o sistema converte o tipo do resultado implicitamente. Tipos incompatíveis podem impedir o pushdown, otimização que envia condições de filtro à camada de armazenamento para filtragem baseada em índice. Quando o pushdown falha, 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 de tipos 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 tipos (ENFORCE_UNWRAP_CAST)
ENFORCE_UNWRAP_CAST controla como o AnalyticDB for MySQL lida com a conversão implícita de tipos em condições de filtro. Quando ativado, o sistema converte a constante para corresponder ao tipo da coluna, em vez do contrário. Isso preserva a otimização de pushdown e evita resultados inesperados causados pelo truncamento de valores.
Configure ENFORCE_UNWRAP_CAST
Há dois métodos de configuraçã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 do estado de ENFORCE_UNWRAP_CAST:
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 |
Apenas |
Sucesso — pushdown na camada de armazenamento |
Ative ENFORCE_UNWRAP_CAST quando colunas forem declaradas como tipos de string, mas consultadas com constantes numéricas, para obter resultados precisos e evitar varreduras completas da tabela.