PHP 7.1.9将MySQL位(1)检索为字符串(20)

时间:2017-09-24 09:35:53

标签: php mysql pdo bit

系统:Debian Jessie(在cubietruck,armv7上)

PHP和MySQL已经从最新的源代码编译(PHP 7.1.9,MySQL 5.7.19)。 PHP信息:https://ibb.co/ggbsZQ

当我尝试使用mysqli或pdo检索bit(1)列值时,它返回字符串(20),基本上它是一个巨大的数字而不是一位。

表格结构和数据:

create table TestValue (
     Id             int             not null auto_increment
    ,StringValue    nvarchar(32)
    ,BitValue       bit(1)
    ,TinyintValue   tinyint(1)
    ,IntValue       int
    ,DoubleValue    double
    ,DateTimeValue  datetime

    ,primary key (Id)
) engine=InnoDB default charset=utf8 collate=utf8_general_ci;

insert into TestValue (StringValue, BitValue, TinyintValue, IntValue, DoubleValue, DateTimeValue)
values   (N'Test string 2', 1, 1, 42, 3.141517, '2017-09-01 12:45:11')
        ,(N'String 2', 0, 0, 128, 4.5, '2017-09-01')
        ,(null, null, null, null, null, null);

测试代码:

echo "pdo:\n";
$pdo = new PDO("mysql:host=localhost;dbname=$db", $user, $password);
$stmt = $pdo->prepare('select BitValue, TinyintValue from TestValue');
$stmt->execute();
$rowset = $stmt->fetchAll(PDO::FETCH_OBJ);
var_dump($rowset);

echo "\nmysqli:\n";
$mysqli = new mysqli('localhost', $user, $password, $db);
$result = $mysqli->query('select BitValue, TinyintValue from TestValue');

while ($row = $result->fetch_assoc())
{
    var_dump($row);
}

结果:

pdo:
array(3) {
  [0]=>
  object(stdClass)#4 (2) {
    ["BitValue"]=>
    string(20) "12999622736513859585"
    ["TinyintValue"]=>
    string(1) "1"
  }
  [1]=>
  object(stdClass)#5 (2) {
    ["BitValue"]=>
    string(20) "12999622757988696064"
    ["TinyintValue"]=>
    string(1) "0"
  }
  [2]=>
  object(stdClass)#6 (2) {
    ["BitValue"]=>
    NULL
    ["TinyintValue"]=>
    NULL
  }
}

mysqli:
array(2) {
  ["BitValue"]=>
  string(20) "12999763474002214913"
  ["TinyintValue"]=>
  string(1) "1"
}
array(2) {
  ["BitValue"]=>
  string(20) "12999763495477051392"
  ["TinyintValue"]=>
  string(1) "0"
}
array(2) {
  ["BitValue"]=>
  NULL
  ["TinyintValue"]=>
  NULL
}

我可以使用tinyint(1)而不是bit(1)但是很多项目使用bit来存储bool值,可能这些项目在我的环境中无法正常工作。

主要问题是如何正确检索位值?

0 个答案:

没有答案