【问题标题】:I can't load a MySQL table containing only integer columns from a file我无法从文件中加载仅包含整数列的 MySQL 表
【发布时间】:2013-10-30 06:46:16
【问题描述】:

我正在尝试将数据导入 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;

我收到的警告:

Level Code Message
Warning 1366 Incorrect integer value: '229733561174' for column 'F1' at row 1
Warning 1366 Incorrect integer value: '44224449355443' for column 'F2' at row 1
Warning 1366 Incorrect integer value: '0 0 0 55555557555000 12345678901' for column 'F3' at row 1
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
Warning 1261 Row 1 doesn't contain data for all columns
7 rows in set (0.00 sec)

我不明白为什么前两列的值是Incorrect integer value,以及为什么第 3-7 列的值都被视为一列。

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

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

谁能告诉我我做错了什么?

【问题讨论】:

  • 尝试将列的默认值设置为 0。
  • @Mihai 我试过了 - 它没有帮助。不过感谢您的建议。

标签: mysql import load-data-infile


【解决方案1】:

我发现了问题。我的数据库中的默认字符集是 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;

【讨论】:

【解决方案2】:

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

| 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 '';

【讨论】:

  • 感谢您的回答,但标签不是问题。正如我在问题中提到的,我尝试将分隔符更改为“,”并添加了fields terminated by ',' enclosed by '' escaped by '\\' lines terminated by '\n' starting by '',并收到了类似的警告。前两列已正确解析,但会给出“不正确的整数类型”警告。接下来的 4 列都被解析为一列 - 0,0,0,55555557555000,最后一列被正确解析。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
  • 1970-01-01
相关资源
最近更新 更多