Тип данных 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 - один байт двоичного числа.

Другие вопросы по тегам