【发布时间】:2020-06-05 23:46:04
【问题描述】:
mysql> desc Student;
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| Roll_no | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(200) | YES | | NULL | |
| address | varchar(200) | YES | | NULL | |
| phone | int(100) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+---------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
mysql> insert into Student values(1,'Ram','Delhi',90404444389,18);
错误 1264 (22003):第 1 行的“电话”列的值超出范围
为什么出错..phone size 100 但为什么超出范围..
【问题讨论】:
-
因为电话号码如果被视为数字看起来像非常大的数字大于整数可以容纳可能See 11.1.2 Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT
-
检查dev.mysql.com/doc/refman/8.0/en/integer-types.html的整数范围值,我建议你改用
varchar! -
撇开存储问题不谈,电话号码不是数量意义上的数字,也不是您要对其进行算术运算的东西。它是一个由数字组成的字符串,所以它保留了前导零,您可以对其进行字符串操作,例如检查它是否以特定的区号开头。
标签: mysql