Mysql 如何在不知道列长度的情况下为所有位设置1?
我有一个类似这样的专栏:Mysql 如何在不知道列长度的情况下为所有位设置1?,mysql,sql,bit,Mysql,Sql,Bit,我有一个类似这样的专栏: // mytable +---------+------------+ | id | numb | +---------+------------+ | int(11) | bit(10) | +---------+------------+ | 1 | NULL | | 2 | NULL | +---------+------------+ UPDATE mytable SET numb
// mytable
+---------+------------+
| id | numb |
+---------+------------+
| int(11) | bit(10) |
+---------+------------+
| 1 | NULL |
| 2 | NULL |
+---------+------------+
UPDATE mytable SET numb = b'1111111111';
UPDATE mytable SET numb = b'0';
/* output
+---------+------------+
| id | numb |
+---------+------------+
| int(11) | bit(10) |
+---------+------------+
| 1 | 0000000000 |
| 2 | 0000000000 |
+---------+------------+
*/
UPDATE mytable SET numb = -1;
/* output
+---------+------------+
| id | numb |
+---------+------------+
| int(11) | bit(10) |
+---------+------------+
| 1 | 1111111111 |
| 2 | 1111111111 |
+---------+------------+
*/
这不是预期的结果:
// mytable
+---------+------------+
| id | numb |
+---------+------------+
| int(11) | bit(10) |
+---------+------------+
| 1 | 1111111111 |
| 2 | 1111111111 |
+---------+------------+
你知道,我可以这样做:
// mytable
+---------+------------+
| id | numb |
+---------+------------+
| int(11) | bit(10) |
+---------+------------+
| 1 | NULL |
| 2 | NULL |
+---------+------------+
UPDATE mytable SET numb = b'1111111111';
UPDATE mytable SET numb = b'0';
/* output
+---------+------------+
| id | numb |
+---------+------------+
| int(11) | bit(10) |
+---------+------------+
| 1 | 0000000000 |
| 2 | 0000000000 |
+---------+------------+
*/
UPDATE mytable SET numb = -1;
/* output
+---------+------------+
| id | numb |
+---------+------------+
| int(11) | bit(10) |
+---------+------------+
| 1 | 1111111111 |
| 2 | 1111111111 |
+---------+------------+
*/
但也许我将来会更改numb
列的长度,然后上面的查询就会失败。如何在不知道位列长度的情况下为所有位设置1
编辑:实际上我正在尝试这样做:
// mytable
+---------+------------+
| id | numb |
+---------+------------+
| int(11) | bit(10) |
+---------+------------+
| 1 | NULL |
| 2 | NULL |
+---------+------------+
UPDATE mytable SET numb = b'1111111111';
UPDATE mytable SET numb = b'0';
/* output
+---------+------------+
| id | numb |
+---------+------------+
| int(11) | bit(10) |
+---------+------------+
| 1 | 0000000000 |
| 2 | 0000000000 |
+---------+------------+
*/
UPDATE mytable SET numb = -1;
/* output
+---------+------------+
| id | numb |
+---------+------------+
| int(11) | bit(10) |
+---------+------------+
| 1 | 1111111111 |
| 2 | 1111111111 |
+---------+------------+
*/
如您所见,我为所有位设置
0
,而不知道列的长度。那么我如何才能做到这一点呢?只需设置1
而不是0
?根据@Stavr00在评论中所说的,我可以将值设置为-1
。大概是这样的:
// mytable
+---------+------------+
| id | numb |
+---------+------------+
| int(11) | bit(10) |
+---------+------------+
| 1 | NULL |
| 2 | NULL |
+---------+------------+
UPDATE mytable SET numb = b'1111111111';
UPDATE mytable SET numb = b'0';
/* output
+---------+------------+
| id | numb |
+---------+------------+
| int(11) | bit(10) |
+---------+------------+
| 1 | 0000000000 |
| 2 | 0000000000 |
+---------+------------+
*/
UPDATE mytable SET numb = -1;
/* output
+---------+------------+
| id | numb |
+---------+------------+
| int(11) | bit(10) |
+---------+------------+
| 1 | 1111111111 |
| 2 | 1111111111 |
+---------+------------+
*/
根据@Stavr00在评论中所说的,我可以将值设置为
-1
。大概是这样的:
// mytable
+---------+------------+
| id | numb |
+---------+------------+
| int(11) | bit(10) |
+---------+------------+
| 1 | NULL |
| 2 | NULL |
+---------+------------+
UPDATE mytable SET numb = b'1111111111';
UPDATE mytable SET numb = b'0';
/* output
+---------+------------+
| id | numb |
+---------+------------+
| int(11) | bit(10) |
+---------+------------+
| 1 | 0000000000 |
| 2 | 0000000000 |
+---------+------------+
*/
UPDATE mytable SET numb = -1;
/* output
+---------+------------+
| id | numb |
+---------+------------+
| int(11) | bit(10) |
+---------+------------+
| 1 | 1111111111 |
| 2 | 1111111111 |
+---------+------------+
*/
使用
REPEAT
功能,并对变量使用字符\u最大长度
SELECT id, REPEAT('1', (SELECT CHARACTER_MAXIMUM_LENGTH
FROM information_schema.columns
WHERE table_schema = DATABASE()
AND table_name = 'mytable'
AND COLUMN_NAME = 'numb')) AS numb
FROM mytable
使用
REPEAT
功能,并对变量使用字符\u最大长度
SELECT id, REPEAT('1', (SELECT CHARACTER_MAXIMUM_LENGTH
FROM information_schema.columns
WHERE table_schema = DATABASE()
AND table_name = 'mytable'
AND COLUMN_NAME = 'numb')) AS numb
FROM mytable
您可以查询sys表中的数据类型,然后使用它来标识插入的长度
从信息\u SCHEMA.COLUMNS中选择字符\u最大长度,其中table\u name='MYTABLE'和SCHEMA='MYSCHEMA',column\u name='numb'
用于为长度中的每个值填充1。您能将值设置为-1
,这是两个补码中的所有1@Stavr00打得好<代码>更新mytable集合numb=-1代码>工作正常。您可以查询sys表中的数据类型,然后使用它来标识插入的长度从信息\u SCHEMA.COLUMNS中选择字符\u最大长度,其中table\u name='MYTABLE'和SCHEMA='MYSCHEMA',column\u name='numb'
用于为长度中的每个值填充1。您能将值设置为-1
,这是两个补码中的所有1@Stavr00打得好<代码>更新mytable集合numb=-1代码>工作完美。比我的努力简单得多:)@Matt Yes。。。但你的问题也会是正确的。投票给你的答案比我的努力要简单得多:)@Matt Yes。。。但你的问题也会是正确的。投票赞成你的答案