如何使用LOAD DATA LOCAL INFILE添加自定义值? 列time_added是第7列,文件只有第一列和第二列的2个值。对于第7列,time_added我想在从文件加载时使用unix时间戳。
此代码无效:
$result = mysql_query("LOAD DATA LOCAL INFILE '{$myFile}' INTO TABLE {$table} FIELDS TERMINATED BY ':' LINES TERMINATED BY '\n' SET `time_added`=unix_timestamp()");
答案 0 :(得分:1)
为什么这不起作用?
LOAD DATA INFILE 'file.txt'
INTO TABLE t1
(column1, column2)
SET column7 = unix_timestamp();
答案 1 :(得分:1)
@iouri给出的答案表明了解决问题的关键要素,即.csv
文件(column1, column2)
填充的列的明确列表。此行通知LOAD
函数在从.csv
文件加载数据时仅考虑这些列,并避免类似于Row 1 doesn't contain data for all columns
的错误。
您仍需要在表定义中列出所有列,包括自定义列。此外,括号中列出的列名称应与表定义中定义的列的名称匹配。例如,如果表定义指定了两个名为user
和id
的列,那么您需要将行(user, id)
放在SET column7 = unix_timestamp()
行之上。
您可能还想仔细检查是否需要LOAD DATA LOCAL INFILE
而不是LOAD DATA INFILE
(否LOCAL
)。正如load-data的文档中所指定的,LOCAL
关键字会影响文件的预期位置,并且必须正确配置服务器和客户端以允许使用LOCAL
选项。