Jak zauważa @choroba w swojej odpowiedzi, to nie DBI robi cokolwiek z danymi. Po prostu przechodzi przez to, co zwrócił moduł sterownika (w twoim przypadku DBD::mysql).
W Ogólne zasady i zastrzeżenia dotyczące interfejsu sekcja dokumentacji DBI mówi:
Pisałem o tym w dawnych czasach, gdy konfigurowanie perla do obsługi 64-bitowych liczb całkowitych było powszechne, a typy zmiennoprzecinkowe typu long-double były niezwykłe. Obecnie zalecam, aby sterowniki zwracały wartości w najbardziej „naturalnym” typie Perla, który nie grozi utratą danych.
W przypadku niektórych sterowników, które mogą być trudne do zaimplementowania, zwłaszcza tych, które obsługują zwracanie wielu zestawów wyników, z różną liczbą kolumn, z jednego uchwytu, tak jak robi to DBD::mysql.
Przejrzałem DBD::mysql docs ale nie widziałem żadnej wzmianki na ten temat, więc spojrzałem na odpowiedni kod gdzie widzę, że obecny DBD::mysql jest zwracanie liczb jako liczb. W Dzienniku zmian znajduje się również wiele odniesień do ostatnich zmian w tym obszarze .
Być może używasz starej wersji DBD::mysql i powinieneś zaktualizować.