【问题标题】:MySQL how to import different charsets in tsv fileMySQL如何在tsv文件中导入不同的字符集
【发布时间】:2019-04-03 20:22:26
【问题描述】:

我有一个包含 130 万行的 tsv 文件,其中包含不同的字符集,如拉丁语、俄语、中文等。

这是我的表结构

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

我该如何解决这个问题?我做错了什么?我以前从未使用过与拉丁语不同的东西。

【问题讨论】:

  • 你用的是什么客户端?能不能显示中文?是用UTF-8吗?
  • @RickJames 我在使用 Heidi,现在显示正常。正如我在更改为 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;一切正常。谢谢

标签: mysql collation


【解决方案1】:

好吧,我做错了几件事。

这篇文章澄清了很多事情 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'"

【讨论】:

    猜你喜欢
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 2022-11-04
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多