我在 Mac 本地使用 MySQL。 我有一个 CSV 文件,所有字段都用双引号括起来。 以下是 CSV 文件第一行的摘录:
$ head -5 companies.csv
"COMPANY_ADDRESS1","COMPANY_ADDRESS2","COMPANY_CITY","COMPANY_COUNTRY","COMPANY_FAX","COMPANY_GERMANY","COMPANY_ID","COMPANY_INDIANAPOLIS","COMPANY_NAME","COMPANY_STATE","COMPANY_TELEPHONE","COMPANY_VAT","COMPANY_ZIP"
"980 Madison Avenue","6th Floor","New York","USA","","","1393","","Lucky Fives LLC","NY","212-74-2313","","10075"
"1209 Orange Street","","Wilmington","USA","","","1394","","Global Five Holdings","DE","-","","19801"
"2020 Ponce de Leon Boulevard","PH2","Coral Gables","USA","","1015110","1395","","Lion Aero Corporation","FL","305-755-5120","","33134"
"100 NE Adams Street","","Peoria","USA","","","1396","","Caterpillar Inc.","IL","+13096755975","","61630"
这是我的导入命令:
$ mysqlimport --local --ignore-lines=1 my_db companies.csv -u root --fields-enclosed-by='\"' --lines-terminated-by='\r\n' --fields-terminated-by=','
我正在导入所有记录,没有跳过任何内容:
companies: Records: 3063 Deleted: 0 Skipped: 0 Warnings: 104
但是,为什么我在第一列中导入所有数据,而所有其他列都填充为 NULL?
之前创建的表包含支持要加载的数据所需的所有列。
最佳答案
我认为 mysqlimport 正在寻找一个反斜杠双引号来括住字段,但它没有找到任何反斜杠双引号,所以它都是一个字段。
我质疑双引号之前的反斜杠字符的用途。如果这是针对 Linux bash shell,我认为不需要反斜杠来指定双引号。作为演示:
# echo foo --fields-enclosed-by='\"'
foo --fields-enclosed-by=\"
# echo foo --fields-enclosed-by='"'
foo --fields-enclosed-by="
(这只是一个猜测,我可能是错的。我之前已经错了很多次了。mysqlimport 可能会丢弃传递给它的反斜杠字符。问题可能是其他问题。但是为了测试,我会在没有反斜杠的情况下旋转它,看看没有它它会产生多大的烟球。)
演示环境:
# uname -o -r -s
Linux 3.13.0-83-generic GNU/Linux
# echo $SHELL
/bin/bash
关于mysql - 我正在从第一列的 CSV 文件中获取 MySQL 中导入的所有数据。所有其他列都获取 NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37930310/