【发布时间】: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