参数TINYINT(parameter)是啥意思?

Posted

技术标签:

【中文标题】参数TINYINT(parameter)是啥意思?【英文标题】:What is the meaning parameter TINYINT(parameter)?参数TINYINT(parameter)是什么意思? 【发布时间】:2014-05-31 11:44:03 【问题描述】:

我不明白为什么这个选项。 带符号的 TINYINT 数据类型可以存储 -128 到 127 之间的整数值。

mysql> create table b (i tinyint(1));

mysql> insert into b values (42);

mysql> select * from b;
+------+
| i    |
+------+
|   42 |
+------+

【问题讨论】:

MySql: Tinyint (2) vs tinyint(1) - Which difference?的可能重复 【参考方案1】:

数据方面,tinyint(1)tinyint(2)tinyint(3) 等都完全相同。对于SIGNED,它们都在-128 到127 的范围内,对于UNSIGNED,它们都在0-255 的范围内。正如其他答案所指出的,括号中的数字仅仅是一个显示宽度提示。

不过,您可能需要注意的是,application=wise 的情况可能看起来有所不同。在这里,tinyint(1) 可以有特殊的含义。例如,Connector/J(Java 连接器)将tinyint(1) 视为布尔值,而不是将数值结果返回给应用程序,而是将值转换为truefalse。这可以通过tinyInt1isBit=false 连接参数进行更改。

由于数据类型为 8 位(1 个字节),所以 tinyint(1) 可以保存 -128 到 127 范围内的数字 - 显然,无符号 tinyint 可以保存 0-255 的值。

它会默默地截断超出范围的值:

mysql> create table a
    -> (
    ->    ttt tinyint(1)
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> insert into a values ( 127 );
Query OK, 1 row affected (0.00 sec)

mysql> insert into a values ( -128 );
Query OK, 1 row affected (0.00 sec)

mysql> insert into a values ( 128 );
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> insert into a values ( -129 );
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from a;
+------+
| ttt  |
+------+
|  127 |
| -128 |
|  127 |
| -128 |
+------+
4 rows in set (0.00 sec)

mysql>

...除非您更改sql_mode 或更改服务器配置:

mysql> set sql_mode=STRICT_ALL_TABLES;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into a values ( -129 );
ERROR 1264 (22003): Out of range value for column 'ttt' at row 1
mysql>

DDL 中用于数据类型的值(例如:tinyint(1))正如您所怀疑的那样,是显示宽度。但是,它是可选的,客户不必使用它。例如,标准的 MySQL 客户端不使用它。

https://dev.mysql.com/doc/refman/5.1/en/integer-types.html

https://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html

MySql: Tinyint (2) vs tinyint(1) - what is the difference?

【讨论】:

【参考方案2】:

数值数据类型的长度参数只影响显示宽度,不影响可存储的值。

TINYINT   -128 to 127 (or 0-255 unsigned)
SMALLINT  -32768 to 32767 (or 0-65535 unsigned)
MEDIUMINT -8388608 to 8388607 (or 0-16777215 unsigned)
INT       -2147483648 to 2147483647 (or 0-4294967295 unsigned)
BIGINT    -9223372036854775808 to 9223372036854775807 (or 0-18446744073709551615 unsigned)

【讨论】:

以上是关于参数TINYINT(parameter)是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

英语parameter和argument作为参数的意思区别是啥?

parameter汽车配件是啥意思

Parameter是啥意思?

parameter是啥意思?

parameter是啥意思?

tinyint(3) 在 (SQLite) SQL 中是啥意思?