在mysql中存储有符号数字的TINYINT数据类型

TINYINT data type to store signed numbers in mysql

本文关键字:数字 TINYINT 数据类型 符号 mysql 存储      更新时间:2023-10-16

我在MYSQL中有一个表MACRecord。我有3个字段声明为TINYINT(4) (RSSI1, RSSI2, RSSI3),默认值为0。我用它来存储有符号的负值-e - -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字节

我不明白为什么在我的RSSI的列中具有例如-90的值,这些列被声明为只能存储1 byte值的TINYINT(4)显示为具有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       |        |

我有点困惑。

不明白为什么在我的RSSI的列中声明为TINYINT(4)的值例如-90,它只能存储1字节值

显示为具有3字节的数据?

在小数。

"-90"是三个字节的十进制,-90是一个字节的二进制。