Comme le note @choroba dans sa réponse, ce n'est pas le DBI qui fait quoi que ce soit avec les données. Il ne fait que passer par ce que le module de pilote (DBD ::mysql dans votre cas) a renvoyé.
Dans les Règles et mises en garde générales de l'interface section de la documentation DBI, il est écrit :
J'ai écrit cela à l'époque où il était courant de configurer perl pour prendre en charge les entiers 64 bits, et les types à virgule flottante long-double étaient inhabituels. De nos jours, je recommande que les pilotes renvoient les valeurs dans le type Perl le plus "naturel" qui ne risque pas de perdre des données.
Pour certains pilotes qui peuvent être difficiles à implémenter, en particulier ceux qui prennent en charge le renvoi de plusieurs ensembles de résultats, avec différents nombres de colonnes, à partir d'un seul handle, comme le fait DBD::mysql.
J'ai parcouru la DBD::mysql docs mais je n'ai vu aucune mention de ce sujet, alors j'ai regardé le code correspondant où je peux voir que le courant DBD::mysql est renvoyer des nombres sous forme de nombres. Il y a aussi beaucoup de références aux changements récents dans ce domaine dans le journal des modifications .
Peut-être utilisez-vous une ancienne version de DBD::mysql et devriez-vous mettre à jour.