Warum gibt SUM(`column`) eine Zeichenfolge anstelle einer Ganzzahl zurück?

Lesezeit: 2 Minuten

Ivanka Todorovas Benutzeravatar
Ivanka Todorova

Ich verwende Laravel und habe eine Abfrage, die die Verwendung auswählt DB::raw() SUM() einer Spalte:

DB::raw("SUM(points) as game_points")

ich habe installiert mysqldn und AFAIK Laravel verwendet PDO.

Aber game_points ist eine Zeichenfolge, unabhängig vom Typ der Spalte. (Es ist eine ganzzahlige Spalte)

Auch wenn ich es tue:

DB::raw("COUNT(id) as foo_bar")

foo_bar wird als Ganzzahl zurückgegeben.

  • Überprüfen Sie diese Frage.

    – Watew

    17. März 2016 um 9:56 Uhr

Der Benutzeravatar Ihres Common Sense
Ihr gesunder Menschenverstand

Es handelt sich weder um ein Laravel- noch um ein PDO-Problem.

Entsprechend MySQL-Handbuch, SUM() gibt a zurück DECIMAL Wert für Argumente mit genauen Werten (integer oder DECIMAL). Und die einzige Möglichkeit, es darzustellen DECIMAL Typ in PHP ist Zeichenfolgeaus zwei Gründen:

  • Es kann den int-Typ von PHP überlaufen lassen und größer als PHP_INT_MAX sein.
  • Auch wenn es sich bei dem zurückgegebenen Wert um eine Dezimalzahl handelt, kann die Genauigkeit dadurch verloren gehen von Natur aus ungenaue Natur von Gleitkommazahlen (zum Beispiel kann DECIMAL(10,2) genau 0,1 speichern, während der native Float-Typ von PHP am ehesten 0,1000000000000000055511151231257827021181583404541015625 speichern kann)

Aufgrund dieser Vorsichtsmaßnahmen wird der Wert als Zeichenfolge zurückgegeben, und Sie sollten ihn entsprechend dem erwarteten Wert manuell konvertieren – entweder mithilfe der standardmäßigen PHP-Typumwandlung oder mithilfe einiger dedizierter mathematischer Funktionen wie bcmath.

  • Interessant, deshalb CAST(SUM(column) AS INTEGER) funktioniert immer noch und gibt eine Ganzzahl zurück.

    – Marcel Hernandez

    27. Januar 2020 um 23:20 Uhr

  • ab mindestens MySQL 8.0 löst AS INTEGER einen Fehler aus. Sie müssen also AS UNSIGNED schreiben. für mehr

    – Tadas V.

    15. November 2022 um 10:35 Uhr


Benutzer-Avatar von SEsterbauer
SEsterbauer

Sie könnten versuchen, diese Zeichenfolge mithilfe von in eine Ganzzahl umzuwandeln CONVERT(INT, game_points)

Entsprechend bugs.mysql.com, sum() gibt a zurück NEWDECIMAL Datentyp, der äquivalent ist zu string in PHP, während count() gibt eine zurück integer Datentyp.

  • Ich weiß, was ich tun muss, um sie in ganze Zahlen umzuwandeln/umzuwandeln. Ich frage, warum das passiert. 🙂 🙂

    – Ivanka Todorova

    17. März 2016 um 10:00 Uhr

1451560cookie-checkWarum gibt SUM(`column`) eine Zeichenfolge anstelle einer Ganzzahl zurück?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy