MySQL как импортировать разные кодировки в файл tsv - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть файл tsv, содержащий 1.3M строк с различными кодировками, такими как латиница, русский, китайский и т. Д.

это моя структура таблицы

    CREATE TABLE `zip_test` (
    `country_code` VARCHAR(2) NULL DEFAULT NULL,
    `postal_code` VARCHAR(20) NULL DEFAULT NULL,
    `place_name` VARCHAR(180) NULL DEFAULT NULL,
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (`id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=160467
;

Запустив это из командной строки, мне удалось увидеть русские символы в порядке, но другие по-прежнему не отображаются правильно.

mysql -uUser -pPass --default-character-set=utf8 --local-infile database -e "LOAD DATA LOCAL INFILE 'file.tsv'  INTO TABLE table_name  FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'"

Как я могу решить эту проблему? Что я делаю не так? Я никогда не работал с чем-то отличным от латыни.

1 Ответ

0 голосов
/ 04 апреля 2019

Ну, я сделал пару вещей неправильно.

Эта статья многое проясняет https://mathiasbynens.be/notes/mysql-utf8mb4

Я должен запустить это, чтобы подготовить свою базу данных

    # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)

А также моя командная строка должна быть исправлена ​​на:

mysql -uUser -pPass --default-character-set=utf8mb4 --local-infile database -e "LOAD DATA LOCAL INFILE 'file.tsv'  INTO TABLE table_name  FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'"
...