这似乎是一个合理的方法:使用 SET 形式的 LOAD,使用变量并调用诸如 UNHEX 和 CONCAT 之类的函数。
例如:
假设 mytable 有四列:
mysha1 BINARY(20)
a VARCHAR(20)
b VARCHAR(20)
c VARCHAR(20)
列 mysha1 是 a、b 和 c 的 sha1 哈希,并与 '|' 连接 作为分隔符。
并假设输入文件是三个字段的制表符分隔的文本行:
abel\tbaker\tcharlie\t\n
dog\teasy\tfor\t\n
etc\tetc\tetc\t\n
这是我加载表格的方式
LOAD DATA INFILE '/foo/bar/input.txt' INTO TABLE mytable
FIELDS TERMINATED BY '\t' ESCAPED BY '\\' LINES TERMINATED BY '\n'
(@f1, @f2, @f3) SET mysha1 = UNHEX(SHA1(CONCAT_WS('|', @f1, @f2, @f3))),
a=@f1, b=@f2, c=@f3;
更新:在一般情况下,对于无法使用内置函数(如 SHA1)计算的任意二进制值,二进制值必须在 INFILE 中表示为可显示的十六进制字符串,读入@variable,然后用 UNHEX 函数转换成二进制。例如:
表:
mybin8 BINARY(8)
a VARCHAR(20)
b VARCHAR(20)
c VARCHAR(20)
输入文件:
abel\tbaker\tcharlie\t0123456789abcdef\n
dog\teasy\tfox\t2468ace13579bdf\n
etc\tetc\tetc\t0000000000000000\n
加载命令:
LOAD DATA INFILE '/foo/bar/input.txt' INTO TABLE mytable
FIELDS TERMINATED BY '\t' ESCAPED BY '\\' LINES TERMINATED BY '\n'
(a, b, c, @myhex) SET mybin8 = UNHEX(@myhex);