Как я могу обновить немного (10) столбец типа данных? - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть столбец в базе данных с именем active. У меня есть bit(10) тип данных. Я буду использоваться для доступа пользователей. Например, первый символ этого двоичного числа указывает на возможность пользователя голосовать.

В любом случае, этот столбец определен так:

enter image description here

Но на удивление это выглядит 31-значным двоичным числом, все цифры которого равны 1 и не будут изменены на 0 вообще. (ожидаемый результат - 10-значное двоичное число)

enter image description here

Примечание. Этот запрос не вносит никаких изменений в результат:

UPDATE users SET active = 101 WHERE 1

В любом случае, почему 31 цифра? почему это не меняется? И как я могу получить 10-значное двоичное число, которое можно изменить?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Создайте 11 столбцов и сохраните данные. Выберите 1-й столбец в качестве первичного ключа и установите для него автоинкремент.

CREATE TABLE `test` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `column` bit(1) NOT NULL,
 `column` bit(1) NOT NULL,
 `column` bit(1) NOT NULL,
 `column` bit(1) NOT NULL,
 `column` bit(1) NOT NULL,
 `column` bit(1) NOT NULL,
 `column` bit(1) NOT NULL,
 `column` bit(1) NOT NULL,
 `column` bit(1) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
0 голосов
/ 30 апреля 2018

Вы должны использовать двоичную запись, чтобы обновить или вставить свои значения:

 UPDATE users SET active = b'101' WHERE 1

Я протестировал и не могу воспроизвести вашу проблему с битом (10), ставшим битом (31).

Я полагаю, что phpmyadmin не отображает правильно ваши неправильно введенные значения

Я бы посоветовал вам вывести свои значения в виде BIN(active) и CAST(active AS UNSIGNED), чтобы увидеть, что является реальным двоичным значением, сохраненным

Пример

CREATE table test (id INT, tip VARCHAR(100), active bit(10) NULL DEFAULT NULL );

INSERT into test (id,tip) VALUES (1,'testing NULL default');
INSERT into test  VALUES (2, 'testing 0101 without "b" notation', 0101);
INSERT into test  VALUES (3, 'testing 0101 with b notation ', b'0101');
INSERT into test  VALUES (4, 'testing 111 ', 111);
INSERT into test  VALUES (5, 'testing b1111111111 ', b'1111111111');


SELECT id, tip, BIN(active) as binvalue, CAST(active AS UNSIGNED) intvalue  FROM test;

| id |                               tip |   binvalue | intvalue |
|----|-----------------------------------|------------|----------|
|  1 |              testing NULL default |     (null) |   (null) |
|  2 | testing 0101 without "b" notation |    1100101 |      101 |
|  3 |     testing 0101 with b notation  |        101 |        5 |
|  4 |                      testing 111  |    1101111 |      111 |
|  5 |              testing b1111111111  | 1111111111 |     1023 |

Игровая площадка Fiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...