Формат числа при сохранении в БД

Автор OKyJIucT, 02 августа 2013, 10:22:04

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

OKyJIucT

Добрый день.

Вчера установил на новый VDS Debian 7 32bit, поставил с помощью ISP Manager все популярные пакеты (сам в этой области знаний не имею). Возникла такая проблема, не знаю как решить. При выполнении определнных действий в скрипте на PHP получаю 18-значное число, например, 362886185535807488. При выводе его на экран в процессе отладки получаем то, что есть, однако в БД MySQL сохраняется оно в таком виде 3.62886185535807488E+17.

Изначально все работало нормально, однако перенес скрипт на другой хостинг, и начались эти приколы. Может сталкивался с этим кто, подскажите, пожалуйста, где копать? Уточню, что копия скрипта на старом хостинге работает нормально. Подозреваю, что проблема именно в сервере, но где смотреть - понятия не имею.

Заранее спасибо.

qupl

OKyJIucT, сохраняется оно в виде ЧИСЛА, если поле числовое. А то, что Вы смотрите строку с экспонентой нужно смотреть в чем именно смотрите.

Сообщение объединено: 02 августа 2013, 10:38:06

(3 раза "смотреть" - перебор) :)

OKyJIucT

#2
Цитата: qupl от 02 августа 2013, 10:37:02
OKyJIucT, сохраняется оно в виде ЧИСЛА, если поле числовое. А то, что Вы смотрите строку с экспонентой нужно смотреть в чем именно смотрите.
Спасибо за ответ. Если честно вопроса полностью не понял, но постараюсь дать максимум информации.

Тип числа в базе данных - int(32). Я отправляю POST запрос на сервер Twitter, получаю от него ответ, и в переменной $result->id_str приходит как раз то самое 18-значное число.

Когда я пишу echo $result->id_str - то в браузере выводится именно оно, хотя в БД сохраняется с точкой и степенью. В то же время time() сохраняется в стандартном формате, хотя сохраняется оно одновременно

$history = new History;
$history->time = time();
$history->id_tweet = $result->id_str;
$history->save();


Даже когда я делаю так

$history = new History;
$history->time = time();
$history->id_tweet = '362886185535807488';
$history->save();


то есть прямо указываю число, оно в БД сохраняется как 2147483647. Я даже не представляю, откуда берется это число

Сообщение объединено: 02 августа 2013, 10:49:00

Мистика какая то происходит. Изначально тип поля был varchar(32), но заметил эти глюки, поменял на int. Сейчас вернул на varchar - и все стало на свои места. Наверняка это вы потрясли своим бубном ;D Еще раз спасибо за участие ;)

qupl

OKyJIucT, Вы просто слабо понимаете работу с БД.  Если в поле хранится строка, то и выведется она как строка в том же виде. А если хранится число, то при выводе все зависит от читающей стороны, как она это число представит.

OKyJIucT

Так в том и дело, что скрипт выводит то, что хранится в БД, а туда число заносилось уже в "необычном" виде. А в целом да, я начинающий программист, поэтому знаний пока маловато, вот и обращаюсь за помощью к опытным :)