我尝试“自动”将数据从csv(UCS-2 LE Bom编码)导入到我之前创建的表中。但每当我尝试通过命令行导入数据时,我都会收到此错误:
Error Code: 1300. Invalid utf8mb4 character string: '' 0.016 sec
这是我创建表的查询,并尝试使用以下内容插入数据:
DROP TABLE IF EXISTS `Import`;
CREATE TABLE `Import` (
`orderdate` DATETIME DEFAULT NULL,
`Kampagne` INT(7) DEFAULT NULL,
`Kampagnename` VARCHAR(150) DEFAULT NULL,
`sent(overall)` INT(15) DEFAULT NULL,
`number of E-Mails` INT(15) DEFAULT NULL,
`BouncesÄ (overall)` INT(15) DEFAULT NULL,
`openedÜ (overall)` INT(15) DEFAULT NULL,
`On mobileÖ (overall)` INT(15) DEFAULT NULL,
`clicks` INT(15) DEFAULT NULL,
`clicks mobile` INT(15) DEFAULT NULL,
`sold` INT(15) DEFAULT NULL,
`Complaints (overall)`INT(15) DEFAULT NULL,
`logged out(overall)` INT(15) DEFAULT NULL,
`money` INT(15) DEFAULT NULL,
`rateOne%` FLOAT DEFAULT NULL,
`rateTwo%` FLOAT DEFAULT NULL,
`Bouncerate %` FLOAT DEFAULT NULL,
`Openrate%` FLOAT DEFAULT NULL,
`Openrate(mobil) %` FLOAT DEFAULT NULL,
`clickrate %` FLOAT DEFAULT NULL,
`clickrate (mobil) %` FLOAT DEFAULT NULL,
`soldrate %` FLOAT DEFAULT NULL,
`rateThree %` FLOAT DEFAULT NULL,
`rateFour %` FLOAT DEFAULT NULL
)ENGINE=InnoDB DEFAULT CHARSET=UCS2;
LOAD DATA LOCAL INFILE 'C:/Test/Report.csv' INTO TABLE `Import`
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n';
有没有人知道这个问题在哪里?
PS:CSV中的列具有与创建的表中相同的“名称”。
CSV文件中的数据
orderdate;Kampagne;Kampagnename;sent(overall);number of E-Mails;BouncesÄ (overall);openedÜ (overall);On mobileÖ (overall);clicks;clicks mobile;sold;Complaints (overall);logged out(overall);money;rateOne%;rateTwo%;Bouncerate %;Openrate%;Openrate(mobil) %;clickrate %;clickrate (mobil) %;soldrate %;rateThree %;rateFour %
2016-12-07 10:03;2131466;20161207_1002_LC_YoBirthdayYes_LCAll_FR;20;20;0;6;3;1;0;0;0;0;0;100;100;0;30;15;5;0;0;0;0
2016-12-07 10:03;2131467;20161207_1002_LC_YoBirthdayYes_LCAll_UK;9;9;0;5;4;1;1;0;0;0;0;90;100;0;55.6;44.4;11.1;11.1;0;0;0
2016-12-07 10:03;2131465;20161207_1002_LC_YoBirthdayYes_LCAll_CH;11;11;0;4;2;0;0;0;0;0;0;91.7;100;0;36.4;18.2;0;0;0;0;0
答案 0 :(得分:0)
在LOAD语句中,您需要使用LOAD DATA LOCAL INFILE 'C:/Test/Report.csv' INTO TABLE `Import`
CHARACTER SET 'UCS2'
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
子句指定文件字符集。否则使用默认字符集(从您的情况中的消息 - utf8mb4)。您可以参考文档here。
ucs2
utf8mb4
和usc2
都是unicode字符集,但它们不兼容。 tr
使用两个字节的字符序列,而utf8mb4使用可变长度 - 最多4个字节的字符序列来编码字符。
如果您的文件具有Windows样式的行终止符(CRLF),则需要进行转换。一种方法是使用Unix / Linux tr -d '\r' inputfile.txt outputfile.txt
命令:
SELECT e.department_id, d.department_name, e.AVG(salary)
FROM employees e
JOIN departments d
ON (e.department_id = d.department_id)
GROUP BY department_id, department_name;
关于行结尾的说明
要了解文件使用的行结尾,请在Notepad ++(仅限Windows)中打开它,然后从菜单中选择:编辑 - > EOL转换。有三个项目。灰色项目显示文件的样式。您可以通过选择“Unix(LF)”选项并保存文件,在Notepad ++中直接转换它。
<强>建议强>
我建议您使用简单的名称命名列,而不使用特殊字符和空格。这样,在SQL中引用它们就会更容易。就像现在一样,您必须始终引用列名称。当您需要具有“业务意义”列名称时,可以在选择中使用别名。