我正在编写一个脚本,该脚本会定期将 CSV 文件上传到 MySQL 数据库中。问题是 CSV 文件中的一个字段包含用户生成的文本,其中可能包括引号和其他对 MySQL 不友好的字符。
我已经确定上传 CSV 文件的最有效方法是通过 MySQL 的“LOAD DATA INFILE”命令。这是我上传 CSV 时出现在 MyPHPAdmin 中的命令:
LOAD DATA LOCAL INFILE '/home/myfolder/tmp/property_re_1.csv' REPLACE INTO TABLE `markers`
FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\'
LINES TERMINATED BY '\r\n' # 2 rows affected.
简单地使用此命令加载 CSV 是行不通的,因为该进程在遇到“””时立即终止,并且“ESCAPED BY '\'”似乎没有达到其目的。
在这种情况下,我想我可能必须首先使用 PHP 以编程方式转义 CSV 文件中的引号。然后使用 SQL 中的 LOAD DATA INFILE 命令将“转义”文件加载到 MySQL 中。
我确信这是一个具有“最佳实践”解决方案的常见问题。本质上,我的脚本需要在将 CSV 文件加载到 MYSQL 表之前“清理”它。
这是我正在使用的实际 SQL 表和 CSV 文件的链接,以帮助更聪明的人围绕这个问题思考:https ://www.dropbox.com/sh/4iq10i51qlqyq8q/UjEQwvXKDA
提前感谢您的帮助。