2016-04-02 4 views
2

Ich habe ein Problem beim Laden der Geonomes-Datensatz. Heres mein Prozess:Wie lade ich geonames.org Dataset in mysql

erste i erstellen meine Datenbank GeoNames

dann erstelle ich meine Tabelle:

CREATE TABLE `geoname` (
`geonameid` int(11) NOT NULL, 
`name` varchar(200) DEFAULT NULL, 
`asciiname` varchar(200) DEFAULT NULL, 
`alternatenames` varchar(4000) DEFAULT NULL, 
`latitude` decimal(10,7) DEFAULT NULL, 
`longitude` decimal(10,7) DEFAULT NULL, 
`fclass` char(1) DEFAULT NULL, 
`fcode` varchar(10) DEFAULT NULL, 
`country` varchar(2) DEFAULT NULL, 
`cc2` varchar(60) DEFAULT NULL, 
`admin1` varchar(20) DEFAULT NULL, 
`admin2` varchar(80) DEFAULT NULL, 
`admin3` varchar(20) DEFAULT NULL, 
`admin4` varchar(20) DEFAULT NULL, 
`population` int(11) DEFAULT NULL, 
`elevation` int(11) DEFAULT NULL, 
`gtopo30` int(11) DEFAULT NULL, 
`timezone` varchar(40) DEFAULT NULL, 
`moddate` date DEFAULT NULL, 
PRIMARY KEY (`geonameid`), 
KEY `name` (`name`), 
KEY `asciiname` (`asciiname`), 
KEY `latitude` (`latitude`), 
KEY `longitude` (`longitude`), 
KEY `fclass` (`fclass`), 
KEY `fcode` (`fcode`), 
KEY `country` (`country`), 
KEY `cc2` (`cc2`), 
KEY `admin1` (`admin1`), 
KEY `population` (`population`), 
KEY `elevation` (`elevation`), 
KEY `timezone` (`timezone`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci; 

nächsten ist, wo mein Problem ist, ich versuche, die Daten, die ein get zu laden:

Letzte Nachricht Fehler

Ungültige uTF8 Zeichenfolge: '' Afikanisitani, 'Apekanikana, A Phu Han (Afghanistan n), ein

heres 'Phú han meine Abfrage für das Laden von Daten:

LOAD DATA LOCAL INFILE 'allCountries.txt' 
INTO TABLE geoname 
CHARACTER SET 'UTF8' 
(geonameid, name, asciiname, alternatenames, latitude, longitude, fclass,  fcode, country, cc2, admin1, admin2, admin3, admin4, population, elevation, gtopo30, timezone, moddate); 

Ich bin mit meiner Abfragen in Folge pro Kommandozeile.

+0

Angenommen, Ihre Daten sind UTF8, und da Ihre Tabelle ordnungsgemäß für UTF8 eingerichtet ist, liegt das Problem höchstwahrscheinlich in Ihrem Client (sequel pro). Ist es eingerichtet, um utf8 zu handhaben, oder ist es Standard auf Latein oder ASCII oder UTF16 oder etwas anderes komisches? – JNevill

+0

@JNevill - Ich habe das gleiche Problem. Ich benutze Sequel Pro nicht, ich führe den MySQL-Befehl im Ubuntu-Terminal aus, der immer bis heute funktioniert hat. Irgendwelche anderen Ideen? – TomDogg

Antwort

1

Ich war immer the same error on MySQL 5.7.13 - was seltsam war, da Import der allCountries.txt Datei in MySQL 5.6

gut zu funktionieren schien

Nicht sicher what exactly changed between MySQL 5.6 and 5.7 aber es hat etwas mit der Standard-character_set und collation in 5,7

zu tun

basierend auf this Q&A ich den Standardzeichensatz zu utf8mb4 aktualisiert, die mir dann die allCountries.txt Datei ohne Probleme

Login mysql in termina laden aktiviert l mit mysql -u root -p und führen Sie die folgende Abfrage:
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

Die Standard-MySQL 5.7.13 Antwort ausgesehen:

+--------------------------+-------------------+ 
| Variable_name   | Value    | 
+--------------------------+-------------------+ 
| character_set_client  | utf8    | 
| character_set_connection | utf8    | 
| character_set_database | latin1   | 
| character_set_filesystem | binary   | 
| character_set_results | utf8    | 
| character_set_server  | latin1   | 
| character_set_system  | utf8    | 
| collation_connection  | utf8_general_ci | 
| collation_database  | latin1_swedish_ci | 
| collation_server   | latin1_swedish_ci | 
+--------------------------+-------------------+ 

(Arbeiten auf OS X) Ich habe dann eine my.cnf Datei zu /etc/my.cnf
hinzuzufügen benötigt - Sie können es kopieren:
sudo cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
- zuweisen my.cnf-_mysql oder es wird nicht (häufiges Problem, wenn ein 01 gelesen werden können,Datei existiert, aber entweder durch Wurzel oder eine zu permissive Berechtigungen im Besitz)
sudo chown _mysql /etc/my.cnf
- Aktualisiere die Konfigurationsdatei die folgenden (in den entsprechenden Abschnitten schließen - sie nur hinzufügen, wenn sie nicht da sind)

[client] 
default-character-set = utf8mb4 
[mysqld] 
character-set-server = utf8mb4 
collation-server = utf8mb4_unicode_ci 
[mysql] 
default-character-set = utf8mb4 

- Neustart mysql (folgende Befehle für OS X):

sudo launchctl unload -F /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist 
sudo launchctl load -F /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist 

- führen Sie den gleichen SHOW VARIABLE Befehl in mysql und die Ergebnisse sind

+--------------------------+--------------------+ 
| Variable_name   | Value    | 
+--------------------------+--------------------+ 
| character_set_client  | utf8    | 
| character_set_connection | utf8    | 
| character_set_database | utf8mb4   | 
| character_set_filesystem | binary    | 
| character_set_results | utf8    | 
| character_set_server  | utf8mb4   | 
| character_set_system  | utf8    | 
| collation_connection  | utf8_general_ci | 
| collation_database  | utf8mb4_unicode_ci | 
| collation_server   | utf8mb4_unicode_ci | 
+--------------------------+--------------------+ 

... jetzt sollte die Datei allCountries.txt ordnungsgemäß funktionieren.