【问题标题】:utf8 garbled when importing into mysql导入mysql时出现utf8乱码
【发布时间】:2012-11-05 14:45:24
【问题描述】:

将 UTF8 编码的数据导入 mysql 对我不起作用。 UTF8 字符已损坏。例如 Nöthnagel 显示为 Nöthnagel

我创建了一个 sql 转储文件来执行包含 UTF-8 编码数据的导入。例如:

INSERT INTO `users` VALUES(1, 'Fred','Nöthnagel');

文件中表示 ö 的字节序列是 c3 b6,我认为它是正确的,因为它在 vim 和设置了这些环境变量的 bash shell 中正确显示:

$ env | grep -i utf
LANG=en_US.UTF-8
XTERM_LOCALE=en_US.UTF-8

mysql db的创建如下:

mysql> CREATE DATABASE mydb CHARACTER SET utf8;

mysql 表是这样创建的:

CREATE TABLE `users` (  
    `id` int(11) NOT NULL AUTO_INCREMENT,  
    `first_name` varchar(30) NOT NULL,  
    `last_name` varchar(30) NOT NULL,
    PRIMARY KEY (`id`),  
    UNIQUE KEY `last_name` (`last_name`)  
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;  

我正在像这样导入转储文件:

 mysql -u root -psecret mydb < mydump.sql

请告诉我上面缺少什么。

【问题讨论】:

  • 这是一个很好的总结,但是你如何做最后的展示给 Nöthnagel
  • 你检查你的文件编码了吗?
  • 试过使用 SET NAMES 语句吗? dev.mysql.com/doc/refman/5.0/en/charset-connection.html
  • @PaulDixon 原始数据在一个使用sqlite的django网站上。该网站现在正在运行mysql。只有数据和 django 配置发生了变化,所以很容易比较它们
  • @PierredeLESPINAY 文件中 ö 的编码数据是 c3 b6。我检查了其他来源以确认这确实是 utf8

标签: mysql utf-8


【解决方案1】:

我认为这也可能与排序规则有关,但我不确定。就我而言,确实如此,因为我必须支持西里尔字母。
试试这个,对我有用:

  1. 在创建目标数据库时将初始排序规则设置为utf8_general_ci

  2. SET NAMES 'utf8' COLLATE 'utf8_general_ci';添加到你的sql文件的顶部

  3. 运行mysql -u root -p --default-character-set=utf8 yourDB &lt; yourSQLfile.sql

还有一件事,为了正确地从您的数据库中获取 UTF-8 数据,您还必须修改您的连接字符串。例如:

mysql.url=jdbc:mysql://localhost:3306/nbs?useJvmCharsetConverters=false&amp;useDynamicCharsetInfo=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;characterSetResults=UTF-8&amp;useEncoding=true

另外,看看my problem 是什么。

【讨论】:

  • 默认字符集甚至适用于导出。 thx #mysql db_name -p -u --default-character-set=utf8 result-utf8.csv
  • 你的第 3 点对我的设置来说已经足够了。我将在这里提到一些我注意到的事情。默认的 sql 转储在 Windows 记事本中读取为 ISO-8859-1,但在 Sublime Text 中读取为 UTF-8。我尝试了 Sublime 的“使用编码保存:UTF-8”,并在记事本中得到了正确的读数,但这破坏了使用此答案中的方法导入 MySQL。但是我仍然可以SOURCE 文件,但是结果无论如何编码错误,这让我很困惑。关键是问题仅在于数据库导入,SOURCE 不在乎。
【解决方案2】:

使用此命令将 utf8 表导入数据库:

mysql -u USERNAME  -pPASSWORD --default_character_set utf8  DATABASE < file.sql

【讨论】:

    【解决方案3】:

    通过在 sql 文件的顶部添加以下内容解决了问题:

    SET NAMES utf8;
    

    【讨论】:

      【解决方案4】:

      我遇到了类似的问题。有许多变量应该是 UTF8,不仅是数据库,还包括客户端、连接、服务器等。

      this article 中描述了您的问题的解决方案。所描述的解决方案是可移植的,因此它不仅适用于 utf8,而且适用于所有其他字符集。您可能需要对其进行修改以满足您的需要。

      【讨论】:

        猜你喜欢
        • 2012-09-07
        • 2013-05-28
        • 1970-01-01
        • 1970-01-01
        • 2016-12-03
        • 1970-01-01
        • 2023-03-30
        • 2014-07-27
        • 2011-07-08
        相关资源
        最近更新 更多