#34001 [Opn->Asn]: truncating value when optional display width value is used
ID: 34001
Updated by: sniper@php.net
Reported By: james at safesearching dot com
-Status: Open
+Status: Assigned
Bug Type: PDO related
Operating System: *
PHP Version: 5.1.0b3
-Assigned To:
+Assigned To: wez
New Comment:
Is the truncating supposed to happen?
Previous Comments:
------------------------------------------------------------------------
[2005-08-10 04:01:33] james at safesearching dot com
Tested php5-200508100030, and the junk character issue seems to be
resolved, but values from the database are still being truncated.
------------------------------------------------------------------------
[2005-08-05 11:20:46] sniper@php.net
Please try using this CVS snapshot:
http://snaps.php.net/php5-latest.tar.gz
For Windows:
http://snaps.php.net/win32/php5-win32-latest.zip
------------------------------------------------------------------------
[2005-08-05 02:36:43] 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
)
)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=34001&edit=1
Thread (8 messages)