当使用默认 NULL 时,MySQL 浮点值全部变为 NULL

标签 mysql database

我创建了下表并将 FLOAT 的默认值设置为 NULL,因为我希望将缺失的浮点值在表中存储为 NULL。但问题是在我将表中的默认值设置为 NULL 后,所有 customerReviewAverage 值都变为 NULL。 以下是我创建表和加载数据的代码。

CREATE TABLE Products(sku INTEGER, name VARCHAR(255), description TEXT,
                          regularPrice FLOAT,
                          customerReviewAverage FLOAT default NULL );
LOAD DATA LOCAL INFILE 'product.csv'
    INTO TABLE Products
    FIELDS TERMINATED BY ','
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
    (sku, name, @description, regularPrice, @customerReviewAverage)
    SET description = IF(@description='',NULL,@description);

这是product.csv 中的数据示例。

19658847,Glanzlichter - CD,,12.99,5.0
19658856,Glanzlichter - CD,,6.99,
19658865,Glanzlichter - CD,,8.99,
1965886,Beach Boys '69 - CASSETTE,,6.99,4.5

后来我发现

(sku, name, @description, regularPrice, @customerReviewAverage)

应修改为

(sku, name, @description, regularPrice, customerReviewAverage)

最佳答案

试试这个

(sku, name, @description, regularPrice, @customerReviewAverage)
SET 
description = IF(@description='',NULL,@description),
customerReviewAverage = IF(@customerReviewAverage='',NULL,@customerReviewAverage);

您的“缺失”值是 CSV 中的空文本。

由于您的 mysql 版本无法正常运行,因此您可以进行单独的更新:

UPDATE Products SET customerReviewAverage = NULL WHERE customerReviewAverage = 0

关于当使用默认 NULL 时,MySQL 浮点值全部变为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35832344/

相关文章:

php - 如何更新主键字段的数据?

mysql - MySql 和 Rails 中的时区

java - 我试图在 java 中的 sqlite 嵌入式数据库中插入一行。插入后,更改仅在该程序中可见

database - WHERE 子句中 OR 条件下的 Postgres 索引行为

MySQL 使用 ODBC 驱动程序连接字符串

MYSQL SELECT AVG() of rows that meet certain conditions in 中满足某些条件的行

MySQL - 基于多态表值的条件查询结果?

mysql - Teradata建表自增列报错

python - 想从 MS Access 升级到 .NET? Visual Studio ?

database - Concrete 5.7 动态切换数据库