PDOstatement (MySQL): вставка значения 0 в битовое (1) поле приводит к записи 1 в таблицу

Я использую битовое (1) поле для хранения логических значений и записи в таблицу с помощью PDO. подготовленные операторы

Это тестовая таблица:

CREATE TABLE IF NOT EXISTS `test` (
  `SomeText` varchar(255) NOT NULL,
  `TestBool` bit(1) NOT NULL DEFAULT b'0'
) ENGINE=MEMORY DEFAULT CHARSET=latin1;

Это тестовый код:

$pdo = new PDO("connection string etc") ;
$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (?,?)') ;
$statement->execute(array("TEST",0)) ;

Выполнение этого кода дает мне строку со значением 1 в TestBool. И то же самое с использованием bindValue() и bindParm(). Я также пробовал именованные заполнители (вместо?) с тем же результатом.

Затем я попробовал:

$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES ("TEST",0)') ;
$statement->execute() ;

Что сработало правильно (TestBool имеет значение 0). Ввод SQL непосредственно в MySQL также работает.

Обратите внимание, что вставка 1 работает всегда.

Так почему же заполнители не могут вставить значение 0? (и как мне это сделать?)

22
задан Peter 10 May 2012 в 18:55
поделиться