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

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

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

错误。

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

【问题讨论】:

    标签: mysql sql


    【解决方案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" 是一个字符串值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 2013-04-20
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多