【问题标题】:Why i get 'Incorrect integer value:' on int field with allow NULL & default NULL为什么我在允许 NULL 和默认 NULL 的 int 字段上得到“不正确的整数值:”
【发布时间】:2016-06-12 17:41:23
【问题描述】:

我刚刚在 phpmyadmin 上将一个 int 必填字段 更改为非必填项(我勾选了空复选框)并制作了默认值 NULL

到目前为止一切顺利, 问题是当我尝试在已存在的记录(来自 phpmyadmin)上更改此值并删除数字值时,我收到一条警告消息:

Affected 0 records.
Warning: #1366 Incorrect integer value: '' for column 'fktypeId' at row 1

它会将 0 放在字段值上。 我不想在该字段中包含任何值,既不是 0 也不是 NULL,只是空字段

这会发生吗?提前致谢。

这绝对是一种 phpmyadmin 操作非强制性 Int 字段的方法。 我们只需要选中复选框!!否则它总是将字段值变为 0

谢谢大家,我为那些提出这个“问题”的人发布了打印屏幕。

【问题讨论】:

  • 字段是整数类型吗?
  • 是的,当然,int(11)。但是我现在看到,当我添加新记录(phpmyadmin)并将该字段留空时,它会添加 NULL 而不是 0。只是为了编辑问题吗?
  • 如果字段的默认NULL,那么新创建的记录将有NULL除非特定的整数值是明确输入。
  • 存储整数值零是预期的行为。不可能在 integer 类型列中存储零长度字符串(或空字符串)...唯一可能的值是整数值或 NULL。 MySQL 将任何非 NULL 值隐式转换为整数值。 MySQL 将空字符串评估为整数值为零。

标签: mysql phpmyadmin null


【解决方案1】:

一个整数列只能存储一个整数值,或者一个 NULL。零长度字符串不能“存储”在整数列中。

如果为整数列提供了无法转换为整数值的字符串值,则会出现警告。

如果运行的是 SQL 语句,可以使用关键字NULL

例如:

 UPDATE mytable SET some_int_col = NULL WHERE id = 42 ;

如果您使用某种“行编辑器”,则可能需要为NULL 值选择一个复选框。

使用 SQL 语句,例如:

 UPDATE mytable SET some_int_col = '' WHERE id = 42 ;

文字字符串值(在这种情况下,长度为零的字符串)被分配给整数数据类型的列,MySQL 将隐式执行转换。在数字上下文中,零长度字符串的计算结果为零。

为了比较,考虑不同字符串隐式转换为数字时的行为。

 SELECT '' AS foo,  '' + 0 AS foo_int
 UNION ALL SELECT ' b'     , ' b'      + 0
 UNION ALL SELECT '1A'     , '1A'      + 0
 UNION ALL SELECT ' 23DE78', ' 23DE78' + 0
 UNION ALL SELECT NULL     , NULL      + 0

返回

foo       foo_int  
--------  -------
                0
 b              0
1A              1
 23DE78        23
(NULL)     (NULL)

【讨论】:

  • 你说得对,我刚刚在 phpmyadmin 上看到了,但你明白了。尽管我在 PC 上拥有的本地 sql 管理器软件允许我在没有任何复选框的情况下清除该字段。干杯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
  • 2015-11-10
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
相关资源
最近更新 更多