导入到mysql时utf8出现乱码

时间:2012-11-05 14:45:24

标签: mysql utf-8

将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数据库创建如下:

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 个答案:

答案 0 :(得分:54)

我认为这也可能与整理有关,但我不确定。在我的情况下,它确实做到了,因为我必须支持西里尔文 试试这个,为我工作:

  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

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

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

    此外,请查看my problem是什么。

答案 1 :(得分:11)

通过在sql文件的顶部添加它来解决问题:

SET NAMES utf8;

答案 2 :(得分:9)

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

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

答案 3 :(得分:0)

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

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