【问题标题】:MySQL Error 1264: out of range value for columnMySQL 错误 1264:列的值超出范围
【发布时间】:2012-12-26 09:48:47
【问题描述】:

正如我在 MySQL 中的表中 SETcust_fax 一样:

cust_fax integer(10) NOT NULL,

然后我插入这样的值:

INSERT INTO database values ('3172978990');

然后它说

`error 1264` 列值不足

我想知道错误在哪里?我的一套?还是其他?

任何答案将不胜感激!

【问题讨论】:

标签: mysql sql insert integer


【解决方案1】:

值 3172978990 大于 2147483647 - INT 的最大值 - 因此出现错误。 MySQL 整数类型及其范围是listed here

还要注意INT(10) 中的(10) 没有定义整数的“大小”。它指定列的display width。此信息仅供参考。

要修复错误,请将您的数据类型更改为VARCHAR。电话和传真号码应存储为字符串。见this discussion

【讨论】:

  • 对我来说,这个错误是由AUTO_INCREMENT 引起的,它在行数很少的表中变成了一个巨大的数字。所以我需要ALTER TABLE table_name AUTO_INCREMENT=103;(如果目前有 102 行)。
  • @totymedli 这对于遇到相同症状但问题不同的人来说可能是一个有用的答案。
  • 我将int 用于电话号码,因为我通过删除所有非数字来清理用户输入。
  • @Reed,我不建议将int 用于电话号码。如果有人将国际格式输入为 0044.... 您将丢失 00。在将代码发送到查询之前对其进行清理。
  • @Tipul07 你完全正确。 VARCHAR 就是这样。我在美国开发我制作的大多数东西都是我家乡本地的,但我仍然应该从第一天开始就考虑到可访问性。
【解决方案2】:

您也可以将数据类型更改为 bigInt,它会解决您的问题,除非需要,否则将整数保留为字符串不是一个好习惯。 :)

ALTER TABLE T_PERSON MODIFY mobile_no BIGINT;

【讨论】:

  • 如果应用程序正在存储电话号码,那么使用字符串当然是首选。但是,感谢您的 ALTER 声明。它解决了我的问题(我使用 INTEGER 存储文件大小的纯整数溢出)。
  • 这对我有用 ALTER TABLE tbl_name MODIFY tbl_column BIGINT(50) UNSIGNED NOT NULL
  • 点赞!其他转换为字符串的建议是无稽之谈。整数是整数是有原因的。
  • "@Reed 我不建议将 int 用于电话号码。如果有人将国际格式输入为 0044...。您将丢失 00。" - 此页面上的另一条评论。我要去VARCHAR
【解决方案3】:

您超出了 int 数据类型的长度。您可以使用 UNSIGNED 属性来支持该值。

SIGNED INT 可以支持到 2147483647 并且 UNSIGNED INT 允许比这翻倍。在此之后,您仍然希望保存数据而不是使用长度为 10

CHARVARCHAR

【讨论】:

    【解决方案4】:

    tl;博士

    确保您的AUTO_INCREMENT 没有超出范围。在这种情况下,为它设置一个新值:

    ALTER TABLE table_name AUTO_INCREMENT=100 -- Change 100 to the desired number
    

    说明

    AUTO_INCREMENT 可以包含一个大于数据类型允许的最大值的数字。如果您填满了之后清空的表,但 AUTO_INCREMENT 保持不变,则可能会发生这种情况,但也可能有不同的原因。在这种情况下,新条目的 id 将超出范围。

    解决方案

    如果这是您的问题的原因,您可以通过将AUTO_INCREMENT 设置为比最新行的 id 大一来修复它。因此,如果您的最新行的 id 为 100,则:

    ALTER TABLE table_name AUTO_INCREMENT=101
    

    如果您想查看AUTO_INCREMENT 的当前值,use this command

    SELECT `AUTO_INCREMENT`
    FROM  INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = 'DatabaseName'
    AND   TABLE_NAME   = 'TableName';
    

    【讨论】:

    • 无法理解原因,但这个对我有用
    【解决方案5】:

    合作:

    ALTER TABLE `table` CHANGE `cust_fax` `cust_fax` VARCHAR(60) NULL DEFAULT NULL; 
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-26
      • 2021-01-13
      • 1970-01-01
      • 2017-09-08
      • 2018-04-19
      • 2011-05-12
      • 1970-01-01
      相关资源
      最近更新 更多