mysql - 对于 MySQL 中的 LOAD DATA INFILE,是否有允许缺失数据等于 NULL 的变通方法?

标签 mysql load-data-infile

我有很多大型 csv 文件,其中 NULL 值存储为 ,,(即没有条目)。使用 LOAD DATA INFILE 会使这些 NULL 值变为零,即使我使用 var DOUBLE DEFAULT NULL 这样的字符串创建表也是如此。经过大量搜索,我发现这是一个 known "bug" ,尽管它可能是某些用户的一项功能。有没有一种方法可以在不进行预处理的情况下即时修复此问题?这些数据都是数字,因此零值与 NULL 有很大不同。

或者如果我必须做预处理,有没有一种最有希望处理数十个 100mb 到 1gb 的 csv 文件?谢谢!

最佳答案

使用 sed 进行最少的预处理,您就可以准备好数据以供导入。

for csvfile in *.csv
do
    sed -i -e 's/^,/\\N,/' -e 's/,$/,\\N/' -e 's/,,/,\\N,/g' -e 's/,,/,\\N,/g' $csvfile
done

这应该对您的 CSV 文件进行就地编辑,并将空白值替换为 \N。更新 glob *.csv 以满足您的需求。

之所以有两个相同的正则表达式匹配 ,, 是因为我想不出另一种方法让它替换两个连续的空白值。例如。 ,,,

关于mysql - 对于 MySQL 中的 LOAD DATA INFILE,是否有允许缺失数据等于 NULL 的变通方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6431378/

相关文章:

php - mysql字段数据更改时出现"mysql_fetch_assoc()"错误

mysql - LOAD DATA LOCAL INFILE 给出错误 The used command is not allowed with this MySQL version

c# - MySqlConnection 不工作

mysql - else 语句在 mysql 中不起作用

PHP 查询不适用于变量

mysql - 需要帮助从 MySQL 填充数据网格

mysql - 如何将 CSV 文件导入 MySQL 表

java - 当 CSV 文件在谷歌存储桶中并且 mysql 5.7.17 安装在云中的 RHEL 机器上时,如何使用 mysql 的加载数据 infile?

mysql - 如何使用 LOAD DATA INFILE 将数据导入特殊字符列名称

php - MySQL LOAD DATA INFILE 存储行号