我在 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 | |
我有点困惑。任何帮助将不胜感激。