Както @choroba отбелязва в отговора си, не DBI прави нещо с данните. Просто преминава през това, което модулът на драйвера (DBD::mysql във вашия случай) върна.
В Общи правила и предупреждения за интерфейс раздел от документите на DBI пише:
Написах това още в дните, преди да беше обичайно да се конфигурира perl да поддържа 64-битови цели числа, а типовете с дълга двойна плаваща запетая бяха необичайни. Тези дни препоръчвам драйверите да връщат стойности в най-„естествения“ тип Perl, който не рискува загуба на данни.
За някои драйвери, които могат да бъдат трудни за внедряване, особено тези, които поддържат връщане на множество набори от резултати, с различен брой колони, от един манипулатор, както прави DBD::mysql.
Прегледах DBD::mysql docs но не видях никакво споменаване на тази тема, затова погледнах съответния код където мога да видя, че текущият DBD::mysql е връщане на числа като числа. Също така има много препратки към последните промени в тази област в регистъра на промените .
Може би използвате стара версия на DBD::mysql и трябва да надстроите.