我不明白为什么要这样做。
有符号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)
视为布尔值,而不是将数值结果返回给应用程序,而是将值转换为true
和false
。这可以通过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/