【问题标题】:Why can I not change mysql int value?为什么我不能更改 mysql int 值?
【发布时间】:2021-04-18 19:23:16
【问题描述】:

这似乎是一个错误,因为当我在列上设置整数值时,它说它已成功更改但没有任何反应并且整数值保持空白。

我无法使用数据库,因为我得到的错误是我的所有整数列都有不正确的整数值,但是当我尝试将它们更改为 int(11) 时,例如什么都没有发生。

有谁知道如何解决这个问题?

我可以将具有 varchar 数据类型的列设置为具有值并且它们工作正常。

致命错误:未捕获的 mysqli_sql_exception:不正确的整数值:'' for column 'topic_id' at row 1 in C:\wamp64\www\mycode\upload2.php on line 32

mysqli_sql_exception:不正确的整数值:'' for column 'topic_id' at row 1 in C:\wamp64\www\mycode\upload2.php on line 32

代码:

ALTER TABLE `topics` CHANGE `topic_id` `topic_id` INT(11) NOT NULL 
AUTO_INCREMENT; 
// This isn't changing the int value at all!

【问题讨论】:

  • 如果任何现有行中包含非数字值,则不能将列从 varchar 更改为 int。先更新行,然后应用ALTER
  • Incorrect integer value: ''... 这个错误信息的哪一部分不清楚?使用一些调试来确定为什么你有一个空字符串而不是一个整数,并在你的代码中修复它。
  • 谢谢大家,我真的很感激。

标签: mysql sql


【解决方案1】:

您尝试执行的操作有多个错误。

首先,存在表中的值不是整数的问题。

其次,除非它是主键,否则不能将列设置为自动递增。

一种选择是放弃主键和自动增量的想法。然后您可以将值更新为NULL,并将列更改为int

update topics
    set topic_id = null
    where topic_id regexp '[^0-9]';

ALTER TABLE `topics` CHANGE `topic_id` `topic_id` INT(11) ; 

Here 是一个 dbfiddle。

如果您真的希望 topic_id 成为自动增量主键,那么我建议您重新创建表。像这样的:

create table temp_topics as
    select *
    from topics;

drop table topics;  -- be very careful here!

create table topics (
    topic_id int auto_increment primary key,
    . . .   -- the rest of the columns
);

insert into topics (<list of columns here>)
    select <list of columns here>
    from temp_topics;

【讨论】:

    【解决方案2】:

    如果您想更改一个值,您必须更新该行。 您尝试做的事情是错误的, int 数据类型具有固定长度(4 个字节),因此当您给它一个长度时,它实际上并没有任何意义,它被 sql 引擎忽略了

    参见 MySql 参考:https://dev.mysql.com/doc/refman/8.0/en/integer-types.html

    数值数据类型分为3类:

    • 整数类型(精确值) - INTEGER、INT、SMALLINT、TINYINT、MEDIUMINT、BIGINT
    • 定点类型(精确值)- DECIMAL、NUMERIC
    • 浮点类型(近似值) - FLOAT、DOUBLE

    【讨论】:

    • 谢谢,我以为您必须为 int 数据类型指定整数长度/值。感谢您的帮助。
    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    相关资源
    最近更新 更多