Тип данных TINYINT для хранения чисел со знаком в MySQL

У меня есть таблица MACRecord в MYSQL. У меня есть 3 поля, объявленные как TINYINT(4) (RSSI1, RSSI2, RSSI3) со значением по умолчанию 0, Я использую его для хранения подписанных отрицательных значений я-е -90, -84 и т.д. Я пытаюсь понять, сколько длины занимает каждое число в столбце. у меня есть c++ код для вывода длины каждого столбца в байтах следующим образом:

lengths = mysql_fetch_lengths(result);
num_rows = mysql_num_rows(result);

for(i = 3; i < num_fields; i++)
{
if (strstr(fields[i].name, "RSSI") != NULL)
{
printf("Column %u is %lu bytes in length.\n",
i, lengths[i]);
}

Так что теперь, например, если столбцы 3, 4 и 5, которые являются столбцами моего RSSI, содержат значения, такие как -90, 0 (по умолчанию), -83, я получаю вывод следующим образом:

Длина столбца 3 составляет 3 байта.

Длина столбца 4 составляет 1 байт.

Длина столбца 5 составляет 3 байта.

Я не понимаю, почему имея значение, например, -90 в моем RSSIстолбцы, которые были объявлены как TINYINT(4) который может хранить только 1 byte Значения отображаются как имеющие 3 bytes данных? Значение по умолчанию 0 имеет смысл. Если я опишу свою таблицу, я вижу, что тип данных TINYINT но все же это говорит о ценностях 3 bytes в длину.

| Field     | Type        | Null | Key | Default | Extra  |
| RSSI1     | tinyint(4)  | YES  |     | 0       |        |
| RSSI2     | tinyint(4)  | YES  |     | 0       |        |
| RSSI3     | tinyint(4)  | YES  |     | 0       |        |

Я немного смущен. Любая помощь будет оценена.

-1

Решение

не понимаю, почему, например, значение -90 в столбцах моего RSSI, которые были объявлены как TINYINT (4), может хранить только 1-байтовые значения

в двоичном формате …

отображается как имеющий 3 байта данных?

в десятичном.

«-90» — это три байта в десятичном формате, а -90 — один байт двоичного числа.

1

Другие решения


По вопросам рекламы [email protected]