何时使用不同的数字数据类型-TINYINT/SMALLINT/MEDIUMINT/INT/BIGINT-MySQL

何时使用不同的数字数据类型-TINYINT/SMALLINT/MEDIUMINT/INT/BIGINT-MySQL,mysql,numeric,unsigned,signed,sqldatatypes,Mysql,Numeric,Unsigned,Signed,Sqldatatypes,我阅读了这里给出的答案:,所以我现在知道他们是如何存储数据的,但我仍然不知道如何设置数据库。例如,如果我希望字段为0或1(二进制排序,0=off,1=on),我是否使用长度为1的TINYINT 我的主要问题是,长度设置决定了什么?因为每个数字数据类型都有自己的关联数据大小 另外,有符号和无符号之间有什么区别,为什么要选择一个而不是另一个?对于二进制字段,请使用位 数字长度指定逗号前后的精度。参见 有符号和无符号之间的区别是,对于无符号,您只能存储正数 例如: 关于INT(正常整数)值 符号范

我阅读了这里给出的答案:,所以我现在知道他们是如何存储数据的,但我仍然不知道如何设置数据库。例如,如果我希望字段为0或1(二进制排序,0=off,1=on),我是否使用长度为1的TINYINT

我的主要问题是,长度设置决定了什么?因为每个数字数据类型都有自己的关联数据大小


另外,有符号和无符号之间有什么区别,为什么要选择一个而不是另一个?

对于二进制字段,请使用

数字长度指定逗号前后的精度。参见

有符号和无符号之间的区别是,对于无符号,您只能存储正数

例如: 关于INT(正常整数)值

符号范围为-2147483648到2147483647。无符号范围为0到4294967295。 如果您使用的是PK auto_increment value,那么在这种情况下应该使用UNSIGNED

  • 这将显示每个整数类型的存储和范围

    • 整数变量有32位存储整数值。 在有符号整数中,保留第一位以存储正号或负号。因此,有符号整数只能使用31位来存储一个值,因此其范围将是−2147483648至+2147483647。 假设您的程序只需要存储大于+2147483647的正整数。你需要考虑一个长的整数,它将占用8位,这将导致内存的浪费。 相反,您可以使用无符号整数。在无符号整数中,没有为符号保留任何位,因此现在您有32位来存储该值。无符号整数的唯一限制是不能使用它存储负值。32位无符号整数的范围为0到4294967295。
      希望它能澄清您对有符号和无符号整数的概念。

      我可以使用
      来表示-1,0或1的值吗?还是专门针对0,1?如果我正在存储货币数据(但没有小数点,即$1、$2、$3等),我将如何存储它?
      BIT(1)
      只能存储
      1
      0
      。您可以阅读所有问题。顺便说一句
      SIGNED
      用于可以为负值的值,而
      UNSIGNED
      用于从不为负值的值。是否有理由在
      BOOL
      上使用
      吗?不,您也可以使用
      BOOL
      。对于
      真假
      值可能更好。如果未使用
      ZEROFILL
      ,字段的长度/大小是否起作用?我刚刚意识到我一直在
      INT(99)中存储时间戳带符号的
      ,它最多只能保存2147483647个值,但时间戳远高于此值-除了我的时间戳没有被截断。这是为什么?