Som @choroba bemærker i sit svar, er det ikke DBI, der gør noget med dataene. Det passerer bare igennem, hvad drivermodulet (DBD::mysql i dit tilfælde) returnerede.
I General Interface Rules &Caveats afsnittet i DBI-dokumenterne står der:
Jeg skrev det tilbage i dagene før, det var almindeligt at konfigurere perl til at understøtte 64-bit heltal, og long-double floating point-typer var usædvanlige. I disse dage anbefaler jeg, at chauffører returnerer værdier i den mest 'naturlige' Perl-type, der ikke risikerer datatab.
For nogle drivere kan det være vanskeligt at implementere, især dem der understøtter returnering af flere resultatsæt med forskellige antal kolonner fra et enkelt håndtag, som DBD::mysql gør.
Jeg skimmede DBD::mysql-dokumenterne men jeg så ingen omtale af dette emne, så jeg kiggede på den relevante kode hvor jeg kan se, at den aktuelle DBD::mysql er returnere tal som tal. Der er også masser af referencer til nylige ændringer i dette område i ændringsloggen .
Måske bruger du en gammel version af DBD::mysql og bør opgradere.