0

我正在尝试将数据导入 MySQL 表。

桌子 :

CREATE TABLE `MYTABLE` (
  `F1` bigint(20) NOT NULL,
  `F2` bigint(20) NOT NULL,
  `F3` int(11) NOT NULL,
  `F4` bigint(20) DEFAULT NULL,
  `F5` tinyint(4) NOT NULL,
  `F6` bigint(20) NOT NULL,
  `F7` bigint(20) NOT NULL,
  PRIMARY KEY (`F1`)
) ENGINE=InnoDB default charset=latin1;

数据文件包含这种形式的记录,以tab分隔:

229733561174    44224449355443  0   0   0   55555557555000  12345678901

导入命令:

mysql> load data infile 'try.txt' INTO TABLE MYTABLE;

我得到的警告:

等级 代码 信息
警告 1366 不正确的整数值:第 1 行的列“F1”的“229733561174”
警告 1366 不正确的整数值:第 1 行的列“F2”的“44224449355443”
警告 1366 不正确的整数值:第 1 行的列“F3”的“0 0 0 55555557555000 12345678901”
警告 1261 第 1 行不包含所有列的数据
警告 1261 第 1 行不包含所有列的数据
警告 1261 第 1 行不包含所有列的数据
警告 1261 第 1 行不包含所有列的数据
7 rows in set (0.00 sec)

我无法弄清楚为什么前两列Incorrect integer value的值是以及为什么第 3-7 列的值都被视为单列。

我尝试将字段分隔符更改为“,”(在加载数据命令中指定),但仍然收到相同的警告。

输出表的所有列都包含 0(除了获得 NULL 的可选列)。

有人可以告诉我我做错了什么吗?

4

2 回答 2

2

我发现了问题。我的数据库中的默认字符集是 ucs2,这导致了问题。如果我在命令中指定不同的字符集load data infile,一切正常:

load data infile 'try.txt' ignore 
into table MYTABLE
character set latin1
fields terminated by '\t' enclosed by '' escaped by '\\'
lines terminated by '\n' starting by ''
ignore 1 lines;
于 2013-10-21T18:38:14.613 回答
0

此错误意味着数据不是真正的制表符分隔:

| Warning | 1366 | Incorrect integer value: '0  0       0       55555557555000
12345678901' for column 'F3' at row 1 |

也许前两个定界符是制表符,但其余的是可变数量的空格。

我建议您验证和标准化字段的分隔方式。

LOAD DATA INFILE命令中显式声明分隔符而不是依赖默认值也是一个好习惯。例如:

load data infile 'try.txt' 
INTO TABLE MYTABLE
FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'
LINES TERMINATED BY '\n' STARTING BY '';
于 2013-10-21T17:27:45.540 回答