为什么我在int字段上得到'不正确的整数值:',允许NULL和&默认为NULL

时间:2016-02-29 15:47:09

标签: mysql phpmyadmin null

我刚刚在 phpmyadmin 上更改了 int必填字段而非强制性(我勾选空复选框)和制作默认值为NULL

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

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

并将字段值设为0。 我不想在该字段中有任何值,既不是0也不是NULL,只是空字段

这可能发生吗?提前谢谢。

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

谢谢大家,我为那些提出这个'问题'的人发布了版画屏幕。

enter image description here

1 个答案:

答案 0 :(得分:2)

整数列只能存储整数值或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)