【问题标题】:When should I use UNSIGNED attribute for a column exactly?我什么时候应该对列使用 UNSIGNED 属性?
【发布时间】:2016-06-01 11:57:08
【问题描述】:

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

假设这个表结构:

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

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

【问题讨论】:

    标签: mysql sql unsigned-integer


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-07
        • 2021-12-30
        • 1970-01-01
        • 2011-08-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多