Подтвердить что ты не робот

Как вставить значение BOOL в базу данных MySQL

Я пытаюсь вставить значения в тип данных BOOL в MySQL (v 5.5.20), используя следующий script:

CREATE DATABASE DBTest;
USE DBTest;
DROP TABLE IF EXISTS first;
CREATE TABLE first (id INT AUTO_INCREMENT NOT NULL PRIMARY KEY , name VARCHAR(30) ,sale  BOOL,); 
INSERT INTO first VALUES ("", "G22","TRUE");
INSERT INTO first VALUES ("", "G23","FALSE");

Но оператор INSERT просто вставляет 0 (Zero) в булевский столбец для параметров TRUE и FALSE! Не могли бы вы сообщить мне, почему это происходит?

4b9b3361

Ответ 1

TRUE и FALSE являются ключевыми словами и не должны указываться как строки:

INSERT INTO first VALUES (NULL, 'G22', TRUE);
INSERT INTO first VALUES (NULL, 'G23', FALSE);

Процитировав их как строки, MySQL затем передаст их в их целочисленный эквивалент (так как булевы на самом деле просто однобайтовые INT в MySQL), которые переводятся в ноль для любой нечисловой строки. Таким образом, вы получаете 0 для обоих значений в своей таблице.

Нечисловые строки, отличные от нуля:

mysql> SELECT CAST('TRUE' AS SIGNED), CAST('FALSE' AS SIGNED), CAST('12345' AS SIGNED);
+------------------------+-------------------------+-------------------------+
| CAST('TRUE' AS SIGNED) | CAST('FALSE' AS SIGNED) | CAST('12345' AS SIGNED) |
+------------------------+-------------------------+-------------------------+
|                      0 |                       0 |                   12345 |
+------------------------+-------------------------+-------------------------+

Но ключевые слова возвращают соответствующее представление INT:

mysql> SELECT TRUE, FALSE;
+------+-------+
| TRUE | FALSE |
+------+-------+
|    1 |     0 |
+------+-------+

Заметим также, что я заменил ваши двойные кавычки одинарными кавычками, как более стандартные оболочки строк SQL. Наконец, я заменил ваши пустые строки на id на NULL. Пустая строка может выдать предупреждение.