【问题标题】:MySQL Datatypes - Signed UnsignedMySQL 数据类型 - 有符号无符号
【发布时间】:2017-04-05 17:50:27
【问题描述】:

让我们考虑一下 TINYINT。 W3Schools 表示有符号范围是 -128 到 127,无符号范围是 0 到 255。

1) 为什么说它的范围是-128到127,为什么不说它的范围是-128到255。

2) 这些范围是否意味着我不能取值 -129 或 256 ? (假设我正在填写一个有文本框的表单)

【问题讨论】:

  • 1.因为its range is from -128 to 255 不正确。 2. 是的,您不能tinyint 用于 256 或 -129。

标签: php mysql sqldatatypes


【解决方案1】:

TINYINT 用 8 位(1 个字节)表示。信息论的基础知识说只有 256 个不同的值 (256 = 2^8) 可以用 8 位表示。

“tinyint”的 8 位是interpreted by MySQL,有两种方式之一:

  • TINYINT UNSIGNED,其中 256 个值解释0..255
  • TINYINT SIGNED(别名TINYINT,因为SIGNED是默认值), 其中解释的范围为-128..127

当最高位为0时,这8位代表SIGNEDUNSIGNED之间的0..127。但是当最高位是1时,这8位要么代表负数,要么代表更大的正数。

如果您愿意,您可以解释这 256 个值的含义为“红色”、“黄色”、“绿色”等。这正是不同数据类型所发生的情况:

ENUM('red', 'yellow', 'green')

另一种解释 8 位字节为您提供ASCII 字符。见CHARVARCHARTEXT

由于TINYINT 必须是SIGNEDUNSIGNED,您不能拥有一个TINYINT 列同时包含以下两个值:-111 和222(在不同的行中)。如果需要,请使用SMALLINT SIGNED。 (这就引出了关于数字的 16 位表示的讨论。)

【讨论】:

    【解决方案2】:

    tinyint 值不是从 -128 到 255 这就是他们不说的原因。

    在创建表时,它要么是有符号的,要么是无符号的。如果不指定,则默认为有符号 -128 到 127。如果在创建表时指定无符号,则其值为 0 到 255。

    CREATE TABLE `example_table` (
      `example_col` tinyint(3) unsigned NOT NULL
    );
    

    第二个答案是“是”,您不能在 tinyint 中使用 -129 或 256 中的值。检查此link 以了解每个的上限和下限。

    【讨论】:

    • 谢谢。你的回答有帮助。我根。使用 PHPMyAdmin。所以我将从属性下拉选项创建无符号。
    【解决方案3】:

    有符号和无符号的范围相同,都是关于优化的。 unsigned 仅用于上限意味着它不允许负数。因此,当您知道只需要正数时,请始终使用无符号数。

    查看here

    【讨论】:

    • "所以当你知道你只需要正数时,总是使用无符号数。"这部分有帮助...谢谢。
    猜你喜欢
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    相关资源
    最近更新 更多