2016-11-22 34 views
-1

让我们考虑TINYINT。 W3Schools表示它的有符号范围是从-128到127,其无符号范围是从0到255.MySQL数据类型 - 有符号无符号

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

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

+2

1.因为它的范围是从-128到255'不是真的。 2.是的,你不能在256或-129使用tinyint。 –

回答

0

有符号和无符号的范围是相同的,它都是关于优化。无符号仅用于上限意味着它不允许负数。所以当你知道你只需要正数时,总是使用ununsigned。

检查它here

+0

请了解范围。他们是不同的。 – Drew

+0

“所以当你知道你只需要正数时,总是使用ununsigned。”这部分帮助...谢谢。 –

0

TINYINT值不是从-128到255,这就是为什么他们不说出来。

创建表时,它是有符号的或无符号的。如果不指定,然后默认值,如果指定的无符号在创建表签署-128到127,其值从0到255

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

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

+0

谢谢。你的回答有帮助。我是。使用PHPMyAdmin。所以我将创建从属性下拉选项的无符号。 –

0

TINYINT通过8位(1字节)表示。信息理论的基本知识表明,只有256个不同的值(256 = 2^8)可以用8位表示。

的 “TINYINT” 的8位是由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位表示。)

+0

谢谢瑞克。 –

相关问题