我什么时候应该对列使用 UNSIGNED 属性?

When should I use UNSIGNED attribute for a column exactly?

根据文档,UNSIGNED 列不接受负数。那么这是否意味着我应该对始终包含正值或空值的每一列使用 UNSIGNED 属性?

假设这个 table 结构:

// vote
+----+---------+---------+-------+------------+----------+
| id | id_post | id_user | value | code_table |   time   |
+----+---------+---------+-------+------------+----------+

在上面的 table 中,除 value 列外,所有列均为空或正数。那么我应该为除 value 列之外的所有列设置 UNSIGNED 属性吗?我对吗?或者使用 UNSIGNED 属性是基于另一个参数?

如果您确定除 value 列之外的所有列都将包含正值,那么是的,您应该将其设置为 UNSIGNED。使用 UNSIGNED 属性仅基于此参数作为您在列中期望的值。还要注意 UNSIGNED 的范围从 0 到 n wheras SIGNED 的范围从大约 -n/2 到 n/2.

在内存方面,有符号和无符号类型占用相同的内存space (INT 为 4 个字节)。

根据您将存储在列中的值使用 UNSIGNED 属性。

例如,ID 通常是无符号值(这只是一种约定,没有什么可以阻止您使用负 ID 值)。

另一方面,age 列将始终包含正值,而 UNSIGNED 值非常适合它。