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

rea*_*ebo 164 mysql sqldatatypes

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

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

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

Ja͢*_*͢ck 215

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

例如:

| v   | a   |  b  |   c |
+-----+-----+-----+-----+
| 1   | 1   |  1  |   1 |
| 10  | 10  | 10  |  10 |
| 100 | 100 | 100 | 100 |
Run Code Online (Sandbox Code Playgroud)

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

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

  • 什么意思'列宽'? (14认同)
  • @Kailas不!tinyint(1)不接受0-9.它接受tinyint可以容纳的整个范围. (10认同)
  • @realtebo它主要由mysql命令行客户端用于显示目的. (7认同)
  • 接口显示的"数字"数.换句话说,它将在左侧填充零.这种功能在数据库的早期就有了一些意义,但现在它只是遗留下来的. (3认同)
  • @Kailas如果你没有使用mysql客户端?一个都没有. (2认同)

Aam*_*irR 71

这意味着显示宽度

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

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

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

但是,如果您使用选项,显示宽度是最重要的ZEROFILL,例如您的表有以下2列:

一个 tinyint(2)zerofill

B tinyint(4)zerofill

两列具有1的值,对于列输出将是010001用于,如下面看到的屏幕截图:)

具有displaywidth的zerofill

  • 奇怪的是,我刚刚发现在C#官方MySQL连接器中,tinyint(1)永远不会返回与0和1不同的值.这可能与tinyint(1)自动被识别为布尔值有关.只是提醒它有时很重要. (13认同)
  • @DanielSharp 这可能是由于默认为 true 的连接选项 tinyInt1isBit。见 https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-configuration-properties.html (4认同)
  • 我一直认为这与接受的数字数量有关(例如,int(4) 不允许任何高于 9999 的数字)。看来我当时一直想错了。在 PHP 和 MySQL 命令行中,我都可以看到上面的值。 (2认同)

zlo*_*ctb 17

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)
Run Code Online (Sandbox Code Playgroud)

  • 请编辑您的答案以包含一些解释.仅代码答案对于教育未来的SO读者几乎没有作用.您的答案是在审核队列中因为质量低劣. (9认同)

Dev*_*art 14

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

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

数字类型属性.

  • 从引用 - 例如,INT(4)指定一个显示宽度为四位的INT.应用程序可以使用此可选显示宽度来显示宽度小于为列指定的宽度的整数值,方法是用空格填充它们. (2认同)
  • 但我还没有看到使用此功能的应用程序或MySQL客户端.我总是使用INT(11)并使用格式化函数来自定义输出. (2认同)