Потеря точности при вставке двойного в MySQL через PDO - PullRequest
4 голосов
/ 15 ноября 2009

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

Когда у меня в php (5.3) есть переменная типа double, и я хочу вставить ее в базу данных (MYSQL 5.0) в поле типа double, значение всегда округляется до 6 цифр момент, когда я использую PDO. Итак, код ниже:

$stmt = $pdo->prepare("UPDATE someTable SET someDouble = :somePHPDouble;");
$number = 0.11124379542256;
$stmt->bindValue(':somePHPDouble', $number);
$stmt->execute();

Результаты в 0.111244 вставлены в БД. Но когда я приведу переменную к строке (!) В выражении привязки, например:

$stmt->bindValue(':somePHPDouble', (string)$number);

правильно вставляет как 0.11124379542256.

Что здесь происходит? Я невежественен. MySQL тип данных someDouble действительно является двойным, и при вставке через консоль mysql он просто работает. И переменная в php действительно двойная, поэтому мне кажется, что внутри PDO что-то идет не так.

Заранее спасибо, -CodePoet.

1 Ответ

6 голосов
/ 15 ноября 2009

Это не преднамеренно, и вы не делаете что-то не так. Кажется, это ошибка PHP.

Согласно этому сообщению об ошибке , оно было исправлено для PHP 5.2.11, но только недавно для ветки 5.3, поэтому вы можете проверить свою точную версию PHP на соответствие упомянутым там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...