首页 文章

MySql:Tinyint(2)vs tinyint(1) - 有什么区别?

提问于
浏览
151

我在mysql中知道boolean为 tinyint (1) .

今天我看到一个表定义了一个整数,如 tinyint(2) ,还有其他像 int(4)int(6) ......

大小在整数和tinyint类型的字段中意味着什么?

4 回答

  • 52

    这意味着 display width

    无论你使用tinyint(1)还是tinyint(2),它都没有任何区别 .

    我总是使用tinyint(1)和int(11),我使用了几个mysql客户端(navicat,sequel pro) .

    它并不意味着什么!我运行了一个测试,所有上述客户端甚至命令行客户端似乎都忽略了这一点 .

    但是,如果您使用 ZEROFILL 选项, display width 是最重要的,例如您的表有以下2列:

    A tinyint(2)zerofill

    B tinyint(4)zerofill

    两列的值都为1,列 A 的输出为 010001B ,如下面的截图所示:)

    zerofill with displaywidth

  • 202

    (m) 表示列显示宽度; MySQL客户端等应用程序在显示查询结果时会使用此功能 .

    例如:

    | v   | a   |  b  |   c |
    +-----+-----+-----+-----+
    | 1   | 1   |  1  |   1 |
    | 10  | 10  | 10  |  10 |
    | 100 | 100 | 100 | 100 |
    

    这里 abc 分别使用 TINYINT(1)TINYINT(2)TINYINT(3) . 如您所见,它使用显示宽度填充左侧的值 .

    重要的是要注意它不会影响该特定类型的可接受值范围,即 TINYINT(1) 仍然接受 [-128 .. 127] .

  • 13
    mysql> CREATE TABLE tin3(id int PRIMARY KEY,val TINYINT(10) ZEROFILL);
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> INSERT INTO tin3 VALUES(1,12),(2,7),(4,101);
    Query OK, 3 rows affected (0.02 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    
    mysql> SELECT * FROM tin3;
    +----+------------+
    | id | val        |
    +----+------------+
    |  1 | 0000000012 |
    |  2 | 0000000007 |
    |  4 | 0000000101 |
    +----+------------+
    3 rows in set (0.00 sec)
    
    mysql>
    
    mysql> SELECT LENGTH(val) FROM tin3 WHERE id=2;
    +-------------+
    | LENGTH(val) |
    +-------------+
    |          10 |
    +-------------+
    1 row in set (0.01 sec)
    
    
    mysql> SELECT val+1 FROM tin3 WHERE id=2;
    +-------+
    | val+1 |
    +-------+
    |     8 |
    +-------+
    1 row in set (0.00 sec)
    
  • 18

    关于INT,TINYINT ......这些是不同的数据类型,INT是4字节数字,TINYINT是1字节数字 . 更多信息 - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT .

    TINYINT数据类型的语法是TINYINT(M),其中M表示最大显示宽度(仅在MySQL客户端支持时使用) .

    Numeric Type Attributes .

相关问题