【问题标题】:Cannot insert the value '-1' into database无法将值“-1”插入数据库
【发布时间】:2013-01-06 16:21:50
【问题描述】:

我无法将值“-1”插入数据库,设置字段的表为int(10)。 我不知道问题是什么。你可以帮帮我吗。谢谢。

$sql2="INSERT INTO attendance_count(username,date,count_time,appendix)VALUES('$applicant','$date1','-1','$altext')";
mysql_query($sql2);

【问题讨论】:

  • count_time是哪种数据类型?
  • 数据类型为int(10)。
  • 那么你不应该把 -1 放在引号内。
  • “无法插入”是什么意思?该语句是否根本不插入数据?你在count_time 中得到了一个意想不到的值吗?如果有,是哪个?
  • 请举个例子。谢谢。

标签: php mysql


【解决方案1】:

不要放单引号,因为它是一个 int。

【讨论】:

  • 没关系。 MySQL 无论如何都要解析它,因为 SQL 字符串是一个 STRING。引号不会改变 MySQL 中的任何内容。
  • 我尝试删除单引号,然后运行代码。它无法将数据插入数据库。数据库中没有任何数据。
  • int 应该是SIGNED。 Mysql 声明所有整数类型都可以有一个可选的(非标准)属性 UNSIGNED。无符号类型可用于在列中仅允许非负数,或者当您需要该列的较大数值范围时。例如,如果 INT 列是 UNSIGNED,则该列的范围大小相同,但其端点从 -2147483648 和 2147483647 变为 0 和 4294967295。
【解决方案2】:

确保该列不是UNSIGNED

【讨论】:

  • -1 阅读原题,说明字段类型为int(10)
【解决方案3】:

文档说它不会存储文字“-”字符, 这意味着它现在可能正在做其他签名的 INTEGER 字段总是完成并且它存储一个符号位来表示负数 而是数字。

您仍然会在数字前面看到一个减号,因为它是 由于该符号位而由 MySQL 生成。

如果你不明白符号位,你可以考虑如何签署 byte 可以存储从 -128 到 127 的数字,而 unsigned byte 可以 存储从 0 到 255 的数字。这是因为 a 中的 8 位之一 有符号数用于存储 +/-(1 为负数,0 为 正数),而其余位提供高达 2^7 的数字(-128 或 127).

因此,例如,如果位 1111 有一个符号位,它们将等于 -7 (负+4+2+1),但如果它们是无符号的,它们将等于15 (8+4+2+1)。 存储的位数仍然相同。

您可能想知道为什么有符号数中的负数可以使用 第 8 位,而正边界限于 7 位之和 (比第 8 位少 1)。这是因为 10000000 被认为是 同时是负数和第 8 位,因为它的 -0 的表示,否则与 00000000 是多余的 代表0。没有正负之分 零,因此负的最高有效位始终是该值 咬自己(但消极)。

【讨论】:

  • 这里是原版post
  • 是的,我在这里提取它,因为这是同一个问题。我想没有错,因为这是公认的答案。
【解决方案4】:

您输入值 -1 的列应为 SIGNED

INT(SIGNED) values can be a minimum of-2147483648 to a maximum of 2147483647 INT(UNSIGNED) values can be a minimum of 0 to a maximum of 4294967295

【讨论】:

  • -1 阅读原题,声明字段类型为int(10)
  • 使用phpmyadmin,我可以将值改为“-1”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 2021-12-27
  • 1970-01-01
  • 2012-04-13
相关资源
最近更新 更多