如何将带有重音字符的CSV文件导入到MySQL中

3

我有一个包含30万行的file.csv文件,其中许多行都是外国城市的名称,并带有重音字符。当我尝试在mysql中进行导入时,该字段会发出警告,并且在特殊字符处截断该字段。

    LOAD DATA LOCAL INFILE '/var/tmp/geoip/location.csv' INTO TABLE Geolocation2 FIELDS TERMINATED BY ',' enclosed by '"' LINES TERMINATED BY '\n' (id, country, region, city, postalCode, latitude, longitude, metrocode, areacode );
5个回答

2

我曾经遇到过由MS Excel创建的CSV文件问题。如果你正在使用Excel,或需要将CSV文件转换为UTF-8格式以便导入MySQL,那么这里的答案可能会有所帮助。


2

使用UTF-8编码打开和保存所有SQL查询和数据文件

这将解决BULK INSERT问题,使用选项WITH(DATAFILETYPE ='widenative')

它还将解决INSERT INTO问题,无论数据是与CREATE TABLE指令在同一文件中还是链接的:r "X:\Path\InsertIntoMyTable.sql"


这对我来说是答案。谢谢! - user460114

1

我该怎么做?我不知道CSV中数据的格式。 - Barry Chapman
猜测一下。将其解释为某种编码,并查看文本是否未被破坏。它可能是UTF-8。 - Dan Grossman

0

这个序列对我有效。

  • 创建数据库{$databasename} DEFAULT CHARACTER SET latin1;
  • ALTER DATABASE {$databasename} DEFAULT CHARACTER SET latin1 DEFAULT COLLATE latin1_swedish_ci;
  • 字符集为latin1;
  • load data infile '{$file.csv}' into table {$tablename} character set latin1 fields terminated by '|' enclosed by '"' lines terminated by '\n';

-1

在导入文件时,告诉MySQL源文件的代码页是什么。例如,要导入一个代码页为Windows-1252的文件,请使用MySQL代码页latin1(即相同的代码页),如下所示:

LOAD DATA LOCAL INFILE '/path/to/file.csv'
  INTO TABLE imported_table
  CHARACTER SET 'latin1'
  COLUMNS TERMINATED BY ','
  OPTIONALLY ENCLOSED BY '"'
  ESCAPED BY '"'
  LINES TERMINATED BY '\r\n'
  IGNORE 1 LINES;

将字符集设置为utf8mb4对我的情况有效。 LOAD DATA LOCAL INFILE 'my.csv' INTO TABLE geo_data CHARACTER SET 'utf8mb4' FIELDS TERMINATED BY .... - turrican_34

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接