首页 > 数据库 > mysql教程 > 使用LOAD DATA INFILE将空字段的CSV数据导入MySQL时如何处理NULL值而不是零?

使用LOAD DATA INFILE将空字段的CSV数据导入MySQL时如何处理NULL值而不是零?

Susan Sarandon
发布: 2025-01-04 14:02:39
原创
177 人浏览过

How Can I Handle NULL Values Instead of Zeros When Importing CSV Data with Empty Fields into MySQL Using LOAD DATA INFILE?

在带有空字段的 CSV 中处理 MySQL LOAD 中的 NULL 值

MySQL 的 LOAD 命令提供了一种将数据从 CSV 文件导入表的简单方法。然而,当从包含空字段的 CSV 文件加载数值数据时,MySQL 倾向于插入零而不是 NULL,即使该列被定义为可空。

考虑以下 CSV 文件 (testdata.txt):

1,2,3,4,5
1,2,3,,5
1,2,3
登录后复制

以及以下 MySQL 表 (moo):

CREATE TABLE moo (
  one INT(1) NULL,
  two INT(1) NULL,
  three INT(1) NULL,
  four INT(1) NULL,
  five INT(1) NULL
);
登录后复制

将 CSV 数据加载到使用 LOAD 命令的 moo 表:

LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS TERMINATED BY "," LINES TERMINATED BY "\n";
登录后复制

生成的表将包含:

+------+------+-------+------+------+
| one  | two  | three | four | five |
+------+------+-------+------+------+
| 1    | 2    | 3     | 4    | 5    |
| 1    | 2    | 3     | 0    | 5    |
| 1    | 2    | 3     | NULL | NULL |
+------+------+-------+------+------+
登录后复制

如您所见,MySQL 为空字段分配零,当列允许 NULL 时,这是不正确的

要解决此问题并确保将空字段正确处理为 NULL,请使用 NULLIF() 函数。 NULLIF() 有两个参数:要检查的字段和字段为空时返回的值。使用方法如下:

LOAD DATA INFILE '/tmp/testdata.txt'
INTO TABLE moo
FIELDS TERMINATED BY ","
LINES TERMINATED BY "\n"
(one, two, three, @vfour, five)
SET four = NULLIF(@vfour,'')
;
登录后复制

在此示例中,第四个字段被读入局部变量@vfour。如果 @vfour 是空字符串,则 SET 语句将 4 个赋给 NULL。

如果多个字段可以为空,请将它们全部读入局部变量并使用多个 SET 语句:

LOAD DATA INFILE '/tmp/testdata.txt'
INTO TABLE moo
FIELDS TERMINATED BY ","
LINES TERMINATED BY "\n"
(@vone, @vtwo, @vthree, @vfour, @vfive)
SET
one = NULLIF(@vone,''),
two = NULLIF(@vtwo,''),
three = NULLIF(@vthree,''),
four = NULLIF(@vfour,'')
;
登录后复制

通过利用 NULLIF(),MySQL LOAD 现在可以正确处理空字段并分配 NULL 值,使您能够准确地处理 MySQL 表中的数据。

以上是使用LOAD DATA INFILE将空字段的CSV数据导入MySQL时如何处理NULL值而不是零?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板