Como @choroba observa em sua resposta, não é o DBI que está fazendo algo com os dados. Está apenas passando pelo que o módulo do driver (DBD::mysql no seu caso) retornou.
Nas Regras e advertências gerais da interface seção dos documentos do DBI diz:
Eu escrevi isso nos dias antes de ser comum configurar o perl para suportar inteiros de 64 bits, e os tipos de ponto flutuante long-double eram incomuns. Hoje em dia eu recomendo que os drivers retornem valores no tipo Perl mais 'natural' que não arrisque perda de dados.
Para alguns drivers que podem ser complicados de implementar, especialmente aqueles que suportam o retorno de vários conjuntos de resultados, com diferentes números de colunas, de um único identificador, como DBD::mysql faz.
Eu dei uma olhada nos DBD::mysql docs mas não vi nenhuma menção a este tópico, então olhei o código relevante onde posso ver que o DBD::mysql é atual retornando números como números. Há também muitas referências a alterações recentes nesta área no log de alterações .
Talvez você esteja usando uma versão antiga do DBD::mysql e deva atualizar.