【问题标题】:Representing n-bit unsigned integers in mysql在mysql中表示n位无符号整数
【发布时间】:2011-06-23 20:56:57
【问题描述】:

我如何在 mysql 中表示这些数据?

16 bit unsigned integer -----Range: 0x0000 - 0xFFF7
64 bit unsigned int.  Depicted as xx:xx:xx:xx:xx:xx:xx:xx -----Range: 0x0000 - 0xFFFFFFFFFFFFFFFF
2 bits ----- 00 - None,  01 - Residential  Security,  10 - High Security
32 bit unsigned int

我应该将所有内容都转换为字符串并在应用层进行转换吗?

【问题讨论】:

    标签: mysql database-schema unsigned-integer


    【解决方案1】:

    根据MySQL's Overview of Numeric Types

    • UNSIGNED SMALLINT:范围是 0 到 65535。这对于 16 位无符号整数来说已经足够了。
    • UNSIGNED TINYINT:范围是 0 到 255。对于 2 位无符号整数来说足够了。看来您需要保留前导零,所以也使用ZEROFILL。要将值保持为两个字符宽,您可以指定 UNSIGNED ZEROFILL TINYINT(2)
    • UNSIGNED INT:范围是 0 到 4294967295。对于 32 位无符号整数来说足够了。
    • UNSIGNED BIGINT:范围是 0 到 18446744073709551615。见下文:

    最后一个,64 位无符号整数,有几个警告,来自上面的链接页面:

    • 所有算术运算都是使用有符号 BIGINT 或 DOUBLE 值完成的,因此您不应使用大于 9223372036854775807(63 位)的无符号大整数,位函数除外!如果你这样做,结果中的一些最后数字可能是错误的,因为在将 BIGINT 值转换为 DOUBLE 时出现舍入错误。
    • 您始终可以通过使用字符串将精确整数值存储在 BIGINT 列中。在这种情况下,MySQL 执行不涉及中间双精度表示的字符串到数字的转换。
    • 当两个操作数都是整数值时,-、+ 和 * 运算符使用 BIGINT 算术。这意味着如果将两个大整数(或返回整数的函数的结果)相乘,当结果大于 9223372036854775807 时,可能会得到意想不到的结果。

    【讨论】:

      【解决方案2】:

      MySQL 支持多种数据类型。见MySQL Data Types

      UNSIGNED BIGINT   : 8-byte (64-bit) integer
      
      UNSIGNED INT      : 4-byte (32-bit) integer
      
      UNSIGNED SMALLINT : 2-byte (16-bit) integer
      

      对于 2 位类型,您可以使用 TINYINT (8-bit)ENUM datatype

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-14
        • 1970-01-01
        • 2011-03-09
        • 2014-02-20
        相关资源
        最近更新 更多