|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2005-08-05 02:36 UTC] james at safesearching dot com
Description: ------------ PDO seems to be trucating the value from MySQL when using the optional display width syntax (ie, mediumint(4)). From http://dev.mysql.com/doc/mysql/en/numeric-types.html <quote> ... The display width does not constrain the range of values that can be stored in the column, nor the number of digits that are displayed for values having a width exceeding that specified for the column. </quote> I'm not sure if that is the goal of PDO here is to acutally constrain the display width, since I occasionally get junk characters after the specified length. ie: +-----------------+ | id mediumint(4) | +-----------------+ | 123456 | +-----------------+ value from PDO is '1234', but sometimes is '1234?d' or other junk characters. Reproduce code: --------------- $c = new PDO( "mysql:dbname=test;host=localhost", '***', '***' ); // mysql mediumint // bytes: 3 // minimum: -8388608 / 0 // maximum: 8388607 / 16777215 $c->exec('CREATE TABLE IF NOT EXISTS foo (id mediumint(4), primary key (id));'); $c->exec("INSERT INTO foo VALUES (12345);"); $c->exec("INSERT INTO foo VALUES (1234567);"); $stmt = $c->prepare("SELECT * FROM foo"); $stmt->execute(); print_r($stmt->fetchAll()); Expected result: ---------------- Array ( [0] => Array ( [id] => 12345 [0] => 12345 ) [1] => Array ( [id] => 1234567 [0] => 1234567 ) ) Actual result: -------------- Array ( [0] => Array ( [id] => 1234 [0] => 1234 ) [1] => Array ( [id] => 1234 [0] => 1234 ) ) --- or sometimes ---- Array ( [0] => Array ( [id] => 1234? [0] => 1234? ) [1] => Array ( [id] => 1234?dL [0] => 1234?dL ) ) PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Oct 25 00:00:02 2025 UTC |
MySQL isn't doing any truncating: Reproduce code: --------------- <?php $c = new PDO( "mysql:dbname=test;host=localhost", '***', '***' ); $c->exec('CREATE TABLE IF NOT EXISTS foo (id mediumint(4), primary key (id));'); $c->exec("INSERT INTO foo VALUES (6234567);"); $stmt = $c->prepare("SELECT * FROM foo"); $stmt->execute(); print_r($stmt->fetchAll()); $c = mysql_connect('localhost', '***', '***'); mysql_select_db('test'); $r = mysql_query("SELECT * FROM foo"); while ($a = mysql_fetch_array($r)) print_r($a); ?> Actual result: -------------- Array ( [0] => Array ( [id] => 6234 [0] => 6234 ) ) Array ( [0] => 6234567 [id] => 6234567 ) Comments: --------- If MySQL was truncating the data, then the results should be the same for both APIs.