如何用MySQL LOAD DATA加载无双引号的竖线分隔数据?
解决MySQL加载竖线分隔、仅referrer带双引号空值的数据问题
我来帮你搞定这个LOAD DATA的问题!你的数据是竖线|分隔,只有最后一个referrer字段可能出现""这种带双引号的空值,其他字段都没有引号,对吧?下面是完整的解决方案:
1. 先确认前置条件
首先要确保MySQL的local_infile功能是开启的,不然LOAD DATA LOCAL会报错:
- 登录MySQL执行:
SHOW VARIABLES LIKE 'local_infile'; - 如果结果是
OFF,执行:SET GLOBAL local_infile = 1;,然后重新连接数据库。
另外,你的MySQL账号需要有FILE权限,不然没法读取本地文件。
2. 完整的LOAD DATA命令
假设你的表结构和数据字段一一对应(shortUrl、url、date、ipAddr、userAgent、referrer),直接用这个命令:
mysql -h <host> -u <user> --password=<password> --local-infile <db_name> -e " LOAD DATA LOCAL INFILE '/data/<file>.csv' INTO TABLE <your_table_name> FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n' -- 如果你的CSV有表头行,就加上下面这行 -- IGNORE 1 LINES (shortUrl, url, @raw_date, ipAddr, userAgent, referrer) SET date = STR_TO_DATE(@raw_date, '%Y-%m-%dT%H:%i:%s.%fZ'); "
3. 关键参数解释
FIELDS TERMINATED BY '|':明确告诉MySQL字段之间用竖线分隔,完全匹配你的数据格式。OPTIONALLY ENCLOSED BY '\"':这个是处理referrer字段的关键!它允许字段可选用双引号包裹——其他没有引号的字段会正常加载,而referrer的""会被自动解析为空字符串,完美适配你的数据情况。LINES TERMINATED BY '\n':指定行之间用换行符分隔,如果你的文件是Windows生成的(换行符是\r\n),改成'\r\n'就行。- 日期转换部分:你的日期格式是
2017-05-21T16:14:49.590Z,MySQL默认识别不了这种带T和Z的格式,所以先用用户变量@raw_date接收原始字符串,再用STR_TO_DATE转换成MySQL支持的DATETIME类型。
4. 额外注意事项
- 如果你的CSV文件第一行是表头(比如字段名),一定要加上
IGNORE 1 LINES跳过这一行,不然表头会被当成数据加载进去。 - 测试的时候可以先拿几行数据生成一个小文件试加载,确认没问题再批量导入,避免出错后返工。
内容的提问来源于stack exchange,提问作者A B
相关产品推荐
相关产品推荐

