为什么我在允许 NULL 和默认 NULL 的 int 字段上得到“错误的整数值:”

问题描述 投票:0回答:2

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

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

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

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

这会发生吗?预先感谢。

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

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

mysql phpmyadmin null
2个回答
4
投票

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

0
投票

只是想将其添加到池中,即使它已经在之前的答案中部分提及:

我的查询是:

UPDATE myTable SET myColumn='NULL';

当它应该是:

UPDATE myTable SET myColumn=NULL;
© www.soinside.com 2019 - 2024. All rights reserved.