Com o MariaDB versão 10.1, estamos tentando converter um número inteiro em uma string, por exemplo, varchar(300)
. Consulte o exemplo de SQL abaixo para obter um exemplo minimizado.
A convert()
função pode converter o número inteiro em um tipo de dados de comprimento fixo char(300)
, mas ocorre um erro reclamando da sintaxe se tentar converter para um tipo de dados de comprimento variável varchar(300)
.
A cast()
função parece ter o mesmo comportamento.
Nossa pergunta:
Por que a função falha na conversão para varchar(300)
? Se possível, como fazemos isso funcionar?
select version()
;
-- OK
-- 10.1.12-MariaDB
set @i = cast(1 as int);
-- OK
select @i
;
-- OK
-- 1
select convert(@i, char(300) ) as col
;
-- OK
-- 1
select convert(@i, varchar(300)) as col
;
-- Error
/* SQL Error [1064] [42000]: (conn=284164) You have an
error in your SQL syntax; check the manual that corresponds
to your MariaDB server version for the right syntax to use
near 'varchar(300)) as col
*/
select cast(@i as char(300) ) as col
;
-- OK
-- 1
select cast(@i as varchar(300)) as col
;
-- Error
/* SQL Error [1064] [42000]: (conn=284164) You have an
error in your SQL syntax; check the manual that corresponds
to your MariaDB server version for the right syntax to use
near 'varchar(300)) as col
*/
VARCHAR
já que o tipo de destino de conversão é compatívelconforme explicitamente indicado no manual .