我不明白为什么要这样做。
有符号tinyint数据类型可以存储-128到127之间的整数值。

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

mysql> insert into b values (42);

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

最佳答案

数据方面,tinyint(1)tinyint(2)tinyint(3)等都完全相同。它们都在SIGNED的-128到127之间,或UNSIGNED的0-255之间。正如其他答案所指出的,括号中的数字只是一个显示宽度提示。
不过,您可能需要注意,application=wise的情况可能看起来有所不同。在这里,tinyint(1)可以有一个特殊的含义。例如,connector/j(java connector)将tinyint(1)视为布尔值,而不是将数值结果返回给应用程序,而是将值转换为truefalse。这可以通过tinyInt1isBit=false连接参数进行更改。
tinyint(1)可以保存范围从-128到127的数字,因为数据类型是8位(1字节)-显然,无符号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>

数据类型(如:tinyint(1))的ddl中使用的值是您怀疑的显示宽度。但是,它是可选的,客户不必使用它。例如,标准的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?

关于mysql - 参数TINYINT(parameter)的含义是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23112203/

10-13 08:56