28

将 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

请告诉我上面缺少什么。

4

4 回答 4

70

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

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

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

  3. mysql -u root -p --default-character-set=utf8 yourDB < yourSQLfile.sql

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

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

另外,看看我的问题是什么。

于 2012-11-05T14:54:41.457 回答
14

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

mysql -u USERNAME  -pPASSWORD --default_character_set utf8  DATABASE < file.sql
于 2016-02-02T15:30:54.240 回答
12

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

SET NAMES utf8;
于 2012-11-05T15:18:25.760 回答
1

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

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

于 2012-11-05T14:57:57.690 回答