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。。。但你的问题也会是正确的。投票赞成你的答案