Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum ändert DBI implizit Integer in Strings?

Wie @choroba in seiner Antwort feststellt, ist es nicht das DBI, das irgendetwas mit den Daten macht. Es wird nur das weitergegeben, was das Treibermodul (in Ihrem Fall DBD::mysql) zurückgegeben hat.

In den General Interface Rules &Caveats Abschnitt der DBI-Dokumentation heißt es:

Ich habe das in den Tagen geschrieben, bevor es üblich war, Perl so zu konfigurieren, dass es 64-Bit-Ganzzahlen unterstützt, und Long-Double-Gleitkommatypen waren ungewöhnlich. Heutzutage empfehle ich, dass Treiber Werte im „natürlichsten“ Perl-Typ zurückgeben, der keinen Datenverlust riskiert.

Für einige Treiber, die schwierig zu implementieren sein können, insbesondere solche, die die Rückgabe mehrerer Ergebnismengen mit unterschiedlicher Anzahl von Spalten von einem einzigen Handle unterstützen, wie es DBD::mysql tut.

Ich habe die DBD::mysql-Dokumentation überflogen aber ich habe keine Erwähnung dieses Themas gesehen, also habe ich mir den relevanten Code wo ich sehen kann, dass die aktuelle DBD::mysql ist Zahlen als Zahlen zurückgeben. Es gibt auch viele Verweise auf kürzliche Änderungen in diesem Bereich im Änderungsprotokoll .

Vielleicht verwenden Sie eine alte Version von DBD::mysql und sollten aktualisieren.