sql >> Database >  >> RDS >> Mysql

Waarom verandert DBI impliciet gehele getallen in strings?

Zoals @choroba in zijn antwoord opmerkt, is het niet de DBI die iets met de gegevens doet. Het gaat gewoon door wat de drivermodule (DBD::mysql in jouw geval) heeft geretourneerd.

In de Algemene interfaceregels en -voorbehouden sectie van de DBI-documenten staat er:

Ik schreef dat in de dagen voordat het gebruikelijk was om perl te configureren om 64-bits integers te ondersteunen, en long-double floating point-types waren ongebruikelijk. Tegenwoordig raad ik aan dat stuurprogramma's waarden retourneren in het meest 'natuurlijke' Perl-type dat geen risico loopt op gegevensverlies.

Voor sommige stuurprogramma's kan dat lastig te implementeren zijn, vooral die die het retourneren van meerdere resultatensets ondersteunen, met verschillende aantallen kolommen, vanuit een enkele handgreep, zoals DBD::mysql doet.

Ik heb de DBD::mysql-documenten doorgenomen maar ik zag geen melding van dit onderwerp, dus ik keek naar de relevante code waar ik kan zien dat de huidige DBD::mysql is getallen teruggeven als getallen. Er zijn ook veel verwijzingen naar recente wijzigingen op dit gebied in het wijzigingslogboek .

Misschien gebruikt u een oude versie van DBD::mysql en moet u upgraden.



  1. postgresql-poortverwarring 5433 of 5432?

  2. Gratis methoden om corruptie van SQL Server-indexen te herstellen

  3. Retourneer het partitienummer voor elke rij bij het opvragen van een gepartitioneerde tabel in SQL Server (T-SQL)

  4. Hoe 'distinct' te gebruiken in zend db-model