Come osserva @choroba nella sua risposta, non è il DBI che sta facendo qualcosa con i dati. Sta solo passando attraverso ciò che il modulo del driver (DBD::mysql nel tuo caso) ha restituito.
Nelle Regole e avvertenze generali dell'interfaccia sezione dei documenti DBI dice:
L'ho scritto nei giorni prima che fosse comune configurare perl per supportare numeri interi a 64 bit e i tipi a virgola mobile long double erano insoliti. In questi giorni raccomando che i driver restituiscano valori nel tipo Perl più "naturale" che non rischi la perdita di dati.
Per alcuni driver che possono essere difficili da implementare, in particolare quelli che supportano la restituzione di più set di risultati, con diversi numeri di colonne, da un unico handle, come fa DBD::mysql.
Ho sfogliato i DBD::mysql docs ma non ho visto alcuna menzione di questo argomento, quindi ho esaminato il codice pertinente dove posso vedere che l'attuale DBD::mysql è restituire i numeri come numeri. Ci sono anche molti riferimenti a modifiche recenti in quest'area nel registro delle modifiche .
Forse stai usando una vecchia versione di DBD::mysql e dovresti aggiornare.