更新为 NULL 时,列“x”的数据被截断

Posted

技术标签:

【中文标题】更新为 NULL 时,列“x”的数据被截断【英文标题】:Data truncated for column 'x' when updating to NULL 【发布时间】:2018-08-24 08:38:10 【问题描述】:

我有一个 mysql 表,其中包含一个名为 free_delivery_treshold 的 float 类型的列,NOT NULL 未选中。 如果我插入省略此列的数据,则插入默认值 (NULL)。 但是,如果我将其值更新NULL、空字符串或\N,我会得到一个

WARN_DATA_TRUNCATED:第 1 行的“free_delivery_treshold”列的数据被截断

错误。

如何将此列的值更新为 NULL ?

【问题讨论】:

【参考方案1】:

如果你想将free_delivery_treshold 列更新为NULL,你可以试试这个。

您不能将free_delivery_treshold 更新为空字符串或\N,因为类型是float

CREATE TABLE T(free_delivery_treshold  float);

INSERT INTO T VALUES (1);

UPDATE T
SET free_delivery_treshold =NULL

查询 1

SELECT * FROM T

Results

| free_delivery_treshold |
|------------------------|
|                 (null) |

如果要将NULL 数据更新为空字符串或\N,则需要使用charvarchar 而不是float。

CREATE TABLE T(free_delivery_treshold  varchar(50));

INSERT INTO T VALUES (NULL);

UPDATE T
SET free_delivery_treshold =''
WHERE free_delivery_treshold IS NULL

查询 1

SELECT * FROM T

Results

| free_delivery_treshold |
|------------------------|
|                        |

【讨论】:

@GaussianBlurs 它在 sqlfiddle 中工作。是否要将free_delivery_treshold 更新为NULL 谢谢,我写的是 SET free_delivery_treshold="NULL" 而不是 free_delivery_treshold=NULL 哈哈是的NULL != "NULL",NULL 意思是我不知道"NULL" 是一个字符串值。

以上是关于更新为 NULL 时,列“x”的数据被截断的主要内容,如果未能解决你的问题,请参考以下文章

SSIS 合并声明日期时间未更新

SQL基础教程(第2版)第4章 数据更新:4-3 数据的更新(UPDATE)

当value为NULL时,更新一行中的单个列

休眠更新为null,然后尝试按更新列删除

phpMyAdmin,在导入 csv 时,文本被截断

在 SQL Server 中将值分配给类似列后,使用 SSIS 将 Oracle 表列更新为 Null