【问题标题】:why is phone number not stored in integer datataype? [duplicate]为什么电话号码不存储在整数数据类型中? [复制]
【发布时间】: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 但为什么超出范围..

【问题讨论】:

标签: mysql


【解决方案1】:

因为您的数字超出了 int 类型的范围。您可以尝试改用 bigint,或者将列存储为更合适的 varchar,如 here 所述。

请参阅this 答案。一个 int 总是以 4 个字节存储。我认为您误解了 (100) 的作用,它只是控制显示宽度。

docs 中有关数字类型的更多信息。

【讨论】:

    【解决方案2】:

    MySQL 中带符号整数的最大大小为 2,147,483,647。

    90404444389 比最大值多 88,256,960,742。

    虽然它们(通常!但不总是!)由数字组成,但电话号码不是整数。不要那样存储它们。 VARCHAR 更合适。

    【讨论】:

      【解决方案3】:

      我只是猜测

      通常会发生这种情况,因为电话号码很长并且 int 类型有限。 例如 32 位整数(正负值)最大可以表示为 2*147*483*648

      因此,如果电话号码类似于 3*000*000*000,则无法将其读取为 int32。

      【讨论】:

      • 小点I am guessing 开头的答案绝不是一个好主意 :)
      • 我将解释我为什么写“我猜”:在 python 中,读取大量数字没有问题,因为它改变了 Long 的大小,但在其他语言中这可能是一个问题。我不知道这是否可能是他的平台/语言组合中的问题 :) 感谢您的建议,我会在下一个答案中使用它
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 2014-07-01
      • 1970-01-01
      • 2011-06-18
      • 2013-06-27
      • 1970-01-01
      • 2020-05-13
      相关资源
      最近更新 更多