我刚刚在 phpmyadmin 上更改了 int必填字段而非强制性(我勾选空复选框)和制作默认值为NULL 。
到目前为止一切顺利, 问题是当我尝试在已存在的记录(来自phpmyadmin )上更改此值并删除数字值时,我收到一条警告消息:
Affected 0 records.
Warning: #1366 Incorrect integer value: '' for column 'fktypeId' at row 1
并将字段值设为0。 我不想在该字段中有任何值,既不是0也不是NULL,只是空字段。
这可能发生吗?提前谢谢。
这绝对是一种操纵非强制性Int字段的 phpmyadmin 方式。 我们只需勾选复选框!否则它总是将字段值变为0
谢谢大家,我为那些提出这个'问题'的人发布了版画屏幕。
答案 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)