如何为MySQL的位字段插入值?

26

我想把一个值插入到MySQL中的位类型列中,但是我遇到了数据截断错误。

CREATE TABLE `BITTESTTABLE` (
  `db_field` varchar(50) NOT NULL,
   `is_editable` bit(1) NOT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=latin1

如果我使用以下代码插入一行:

INSERT INTO BITTESTTABLE values('XYZ','0')

会收到以下错误提示:

列“is_editable”的数据过长,无法在第1行中存储

那么该如何插入位类型(bit type)的数据呢?


3
将“INSERT INTO BITTESTTABLE values('XYZ','0');”更改为“INSERT INTO BITTESTTABLE values('XYZ',0);”,插入数字0而不是字符。 - amdixon
整数类型的数据即使我使用像'123'这样的引号,也可以完美地接受,但为什么位类型不接受?MySQL有任何限制吗? - SrinivasDJ
如果您输入“123”,它将被视为字符串。Integer支持空值,空值也是字符串。 - Piyush Gupta
1
@SrinivasDJ,如果您插入整数值“123”,有时会因为SQL工具或查询而起作用,但是如果您插入像“abc”这样的整数值,则会引发错误...... SQL Workbench,Yog工具支持整数'123',因为工具的转换。 - Piyush Gupta
@Piyush 我已经插入了一行数据,而没有使用任何 SQL 工具(如 Workbench、Yog 等)。如果你在整数列值中输入 'abc' 而不是 '123',我们将会得到一个错误提示 "incorrect integer value",这意味着它内部将字符串转换为整数。你说 "有时候" 它会工作,那么 MySQL 是否有版本限制呢? - SrinivasDJ
显示剩余2条评论
6个回答

36

你应该使用:

INSERT INTO `BITTESTTABLE` VALUES('XYZ', b'0');

1
可以直接在MySQL Workbench网格中输入工作。 - contactmatt

8

由于比特是一个数字而不是字符串,您需要像这样输入它:

INSERT INTO BITTESTTABLE values('XYZ',0)

2
假设我有一个整数数据类型,如果我将列值插入为“123”,MySQL 将接受它,不会出现错误。 - SrinivasDJ
哦,谢谢你告诉我这个。有一次我在 Int 列中添加数字 '1',它给了我一个错误! - Ahmed Khan

6
你需要以比特格式插入数据,像这样:INSERT INTO BITTESTTABLE values('XYZ',0);。你当前的操作是values('XYZ','0'),所以它被视为字符串值。

4

一般来说,对于booleanbit数据类型,您可以使用0或1,如下所示:

INSERT INTO BITTESTTABLE values('XYZ',0);

4

您可以直接使用true/false;但我不确定这是否与MySQL本身或InnoDB有关:

示例:
INSERT INTO BITTESTTABLE values('XYZ',false);    
INSERT INTO BITTESTTABLE values('XYZ',true);

请尝试运行以下命令:

SELECT TRUE , FALSE  ;

result


0

我之前在Prostgres数据库中插入数据时遇到了同样的问题,但我解决了。

请按照以下方式操作: INSERT INTO table (bitData) VALUES (CAST(1 AS bit));

而不是 INSERT INTO table (bitData) VALUES (1);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接