全部 我有一个test.csv文件,其ID为十六进制数字,如下所示:
Id, DateTime,...
66031851, ...
2E337E4E, ...
table_test是使用MYSQL创建的,如下所示:
CREATE TABLE table_test(
Id BIGINT NOT NULL,
DateTime DATETIME NOT NULL,
OtherId BIGINT NOT NULL,
...,
PRIMARY KEY (Id, DateTime, OtherId)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
创建的table_test如下:
+---------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+--------------+------+-----+---------+-------+
| Id | bigint(20) | NO | PRI | NULL | |
| DateTime | datetime | NO | PRI | NULL | |
我正在使用如下的MYSQL来加载表中的数据:
load data local infile 'test.csv' replace into table table_test character set utf8mb4 fields terminated by ',' ENCLOSED BY '\"' lines terminated by '\n' ignore 1 lines SET Id=CONV(Id, 16, 10);
也尝试过:
SET Id=cast(CONV(Id, 16, 10) AS UNSIGNED)
和
SET Id=cast(CONV(CONVERT(Id,CHAR), 16, 10) AS UNSIGNED)
但十六进制数字的字母与" 2E337E4E"不工作。它们变成了一个比BIGINT更大的数字。但是当我在下面尝试MYSQL时:
select CONV('2E337E4E', 16, 10);
按预期正常结果" 775126606"。所以我想我错过了一个步骤" LOAD DATA"将Id作为CONV()的字符串。搜索了一段时间,但没有找到解决方案。 任何人都有一些想法或提示?
非常感谢
志宏
答案 0 :(得分:1)
此类问题的典型解决方案是将值加载到用户定义的变量中,然后在SET
语句中进行转换。
这样的事情对你有用:
load data local infile 'test.csv'
replace into table table_test
character set utf8mb4
fields terminated by ','
ENCLOSED BY '\"'
lines terminated by '\n'
ignore 1 lines
(@Id, `DateTime`, <explicitly list all other columns>)
SET Id=CONV(@Id, 16, 10);