NodeJS + MySQL - Коверкает число

143
23 января 2020, 04:50

В базе данных есть некий SteamID:

76561198160247832

Он лежит в ячейке (steamid) в базе данных. Я случайным образом выбираю одну строку с каким-либо steamid (в данном случае строка содержит предоставленный выше стимайди), и вывожу его в консоль:

con.query("SELECT * FROM players WHERE id=" + mysql.escape(id), function (err, result20, fields) {
log("Победитель: " + result20[0].steamid);

Мне возвращает:

Победитель: 76561198160247840

В чём может быть проблема? В таблице steamid имеет тип bigint (255) и заполнен верно.

Answer 1

Из 64 бит, отведённых на число, сами цифры числа занимают до 52 бит, остальные 11 бит хранят позицию десятичной точки и один бит – знак. Так что если 52 бит не хватает на цифры, то при записи пропадут младшие разряды.

Интерпретатор не выдаст ошибку, но в результате получится «не совсем то число», что мы и видим в примере выше. Как говорится: «как смог, так записал».

источник

Проще говоря, если в числе больше 16 знаков, будет искажение:

console.log(76561198160247832) 
console.log(765611981602478328)

Answer 2

Как говорилось в ответе выше - для записи таких длинных чисел тупо "не хватает памяти", но это можно исправить двумя строками:

При CreateConnection указать параметры:

supportBigNumbers: true, bigNumberStrings: true.
READ ALSO
Подскажите , почему z-index не работает?

Подскажите , почему z-index не работает?

В общем, есть такая структура html:

135
Как написать функцию для кнопки в React Js

Как написать функцию для кнопки в React Js

Для кнопки с HTML документа надо написать функцию для JS React которая считывает информацию с input type="text" и записывает в такую переменную

157