将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
请告诉我上面缺少什么。
答案 0 :(得分:54)
我认为这也可能与整理有关,但我不确定。在我的情况下,它确实做到了,因为我必须支持西里尔文 试试这个,为我工作:
在创建目标数据库时将初始排序规则设置为utf8_general_ci
将SET NAMES 'utf8' COLLATE 'utf8_general_ci';
添加到sql文件的顶部
运行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
此外,请查看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,也适用于所有其他字符集。您可能需要对其进行修改以满足您的需求。