Какое использование имеет MySQL тип данных 'BINARY (0)'? - PullRequest
1 голос
/ 28 апреля 2019

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

На сайте https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html#data-types-storage-reqs-strings, есть таблица, отображающая типы в соответствии с их требованиями к хранению. И это говорит о том, что я могу определить BINARY (0). Но, на мой взгляд, это не имеет смысла. BINARY (0) будет означать, что я могу хранить 0 байтов - так что ничего. Я что-то пропустил? Какая польза от этого? Или в чем причина?

С другой стороны, я не могу определить столбец BINARY большего размера, чем столбец с 255 байтами. Я всегда думал, что причина 255 в том, что вы начинаете считать с 0. Но когда вам не нужен BINARY (0), вы можете определить BINARY (256) без проблем ...

1 Ответ

1 голос
/ 28 апреля 2019

Мне пришлось поковыряться в этом, потому что я сам не знал. Из этой ссылки мы видим, что BINARY(0) может хранить два типа значений:

  • NULL
  • пустая строка

Таким образом, вы можете использовать столбец BINARY(0) почти так же, как и столбец BIT(1) без значения NULL, а именно как столбец true / false или yes / no. Однако требование к памяти BINARY(0) составляет всего один бит, что не требует дополнительного хранения за границей для столбцов, допускающих значение NULL.

Поскольку состояние не NULL столбца BINARY(0) будет пустой строкой, которая переводится в ноль, вы можете найти все такие записи, используя:

SELECT *
FROM yourTable
WHERE bin_zero_column = 0;

Неотмеченные NULL записи могут быть найдены с использованием WHERE bin_zero_column IS NULL.

...