我创建了下表并将 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/