-1

我在 MYSQL 中有一个表 MACRecord。我有 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]);
     }

因此,例如,如果作为我的 RSSI 列的第 3、4 和 5 列包含诸如 -90、0(默认)、-83 之类的值,我将得到如下输出:

第 3 列的长度为 3 个字节

第 4 列的长度为 1 个字节。

第 5 列的长度为 3 个字节

我不明白为什么-90在 myRSSI的列中声明为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       |        |

我有点困惑。任何帮助将不胜感激。

4

1 回答 1

1

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

在二进制...

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

十进制。

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

于 2014-05-12T05:01:11.583 回答