MySQL 从CSV数据中读取NULL值

MySQL 从CSV数据中读取NULL值

在MySQL中,CSV数据文件经常被用来导入数据到数据库。但是,如果CSV文件中有NULL值,可能会出现问题。在本篇文章中,我们将探讨如何正确地从CSV文件中读取NULL值。

阅读更多:MySQL 教程

问题背景

假设我们有一个包含以下数据的CSV文件(file.csv):

id,name,age
1,John,25
2,Alex,NULL
3,Lisa,20
Mysql

如果我们使用以下语句将数据导入MySQL数据库中的表(table1),那么会出现什么问题呢?

LOAD DATA INFILE '/path/to/file.csv'
INTO TABLE table1
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
SQL

答案是:导入后,NULL值将被替换为空字符串,因此我们将无法确定哪些值原本是NULL。 这很可能导致数据分析和程序设计方面的错误。

解决方法

为了正确地读取CSV文件中的NULL值,我们需要修改LOAD DATA语句,如下所示:

LOAD DATA INFILE '/path/to/file.csv'
INTO TABLE table1
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(id, name, @age)
SET age = NULLIF(@age, '');
SQL

这里的关键在于使用NULLIF()函数。该函数可以将NULLIF(a,b)中的a转换为NULL,当a等于b时。 在我们的例子中,我们使用@age变量来代表CSV文件中的第三列,即年龄。当年龄值为空字符串时,将@age转换为NULL。然后将转换后的值存储到表中的age列中。

测试结果

执行修改后的LOAD DATA语句后,检查table1表中的数据,如下所示:

SELECT * FROM table1;
SQL

输出结果应该如下:

+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | John |   25 |
|  2 | Alex | NULL |
|  3 | Lisa |   20 |
+----+------+------+
Mysql

现在我们成功保留了CSV文件中的NULL值。

总结

当从CSV文件中导入数据到MySQL时,必须小心处理NULL值。通过在LOAD DATA语句中使用NULLIF()函数,我们可以正确地读取CSV文件中的NULL值,避免数据问题。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册